Métodos Get e Set Dinâmico em PHP
Criando métodos Get e Set.
Uma forma fácil e dinâmica de usar métodos Get e Set com PHP.
Você já deve ter usado os métodos GET e SET
dentro da Classe para pegar ou passar um valor para outro método, e
notou que fica um código muito comprido dependendo do tanto de GET e SET for
utilizar nessa classe.
Existe uma forma de colocar muitos métodos GET e SET em poucas
linhas usando um array que pode ser declarado como método Público,
Privado ou Protegido.
Organizando o projeto.
Primeiro vamos criar três arquivos PHP.
- · Index.php
- · Produto.php
- · GetSetDinamico.php
Arquivo index.
Vamos usar esse arquivo para instanciar a Classe
produto e um método para mostrar o resultado.
Os valores podem vir pelo banco de dado como um array de objeto,
mas vou criar um array de objeto no arquivo para demonstrar.
Index.php
<?php
require_once"Produto.php";
$arrayProduto = [
"NomeProduto" => "Memória HyperX FURY DDR4 RGB",
"Marca"
=> "HyperX",
"Velocidade"=>"2400MHz a 3466MHz"
];
$produto = new Produto();
$produto->setData($arrayProduto);
$produto->MostarProduto();
//retornando o array
var_dump($produto->getValues());
//retornando o array
var_dump($produto->getValues());
?>
Arquivo GetSetDinamico.
É nesse arquivo que a mágica acontece onde recebe a chave e
o valor e guardar em uma variável para ser utilizada pelo outro método.
Será necessária uma variável que vai identificar as 3
primeiras letras e falar se é um SET ou GET.
$method = substr($name, 0, 3);
Depois outra variável que vai descartar essas 3 primeiras
letras.
$fieldName = substr($name, 3, strlen($name));
Agora se necessário uma verificação se é um GET ou SET e executar
uma ação.
switch ($method)
{
case
"get":
return
(isset($this->values[$fieldName])) ? $this->values[$fieldName] : NULL;
break;
case
"set":
$this->values[$fieldName]
= $args[0];
break;
}
Após criar o método de verificar se é SET ou GET, agora será
criado um métodos que vai criar os valores recebendo o array de objeto passado
pelo arquivo index.
public function setData($arrayProduto = array())
{
foreach
($arrayProduto as $key => $value) {
$this->{"set".$key}($value);
}
}
Veja o arquivo completo dessa classe.
GetSetDinamico.php
<?php
//abstrato serve de modelo para outra class
abstract Class GetSetDinamico{
public
$values = [];
public
function __call($name, $args)
{
$method
= substr($name, 0, 3);
$fieldName
= substr($name, 3, strlen($name));
switch
($method)
{
case
"get":
return
(isset($this->values[$fieldName])) ? $this->values[$fieldName] : NULL;
break;
case
"set":
$this->values[$fieldName]
= $args[0];
break;
}
}
public
function setData($arrayProduto = array())
{
foreach
($arrayProduto as $key => $value) {
$this->{"set".$key}($value);
}
}
}
?>
Arquivo Produto
Nessa parte vamos estender a classe GetSetDinamico para
criar os métodos.
Primeiro vamos criar um atributo protegido com os nomes dos
GET e SET que vamos criar, mas tome cuidado para não errar o nome, sendo que
eles são os mesmos passados no arquivo index.
protected $fields = [ "NomeProduto","Marca","Velocidade"
];
Com isso podemos chamar os GET.
echo "Nome: " . $this->getNomeProduto() .
"<br>";
echo "Marca: " . $this->getMarca() .
"<br>";
echo "Velocidade: " . $this->getVelocidade() .
"<br>";
Caso precise retornar o array inteiro poder usar o metodo getValues().
Caso precise retornar o array inteiro poder usar o metodo getValues().
Arquivo completo do Produto.
<?php
require_once"GetSetDinamico.php";
class Produto extends GetSetDinamico{
protected
$fields = [
"NomeProduto","Marca","Velocidade"
];
public
function MostarProduto(){
echo
"Nome: " . $this->getNomeProduto() . "<br>";
echo
"Marca: " . $this->getMarca() . "<br>";
echo
"Velocidade: " . $this->getVelocidade() . "<br>";
}
public function getValues(){
return $this->values;
}
public function getValues(){
return $this->values;
}
}
?>
Os SET foram feitos no arquivo index.
Caso queira saber mais sobre GET e SET confira no link abaixo.
https://criando-script.blogspot.com/2019/08/php-orientado-objetos-passando-valores.html
Comentários
Postar um comentário