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());


 ?>


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().

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;
}


}



 ?>

Os SET foram feitos no arquivo index.


Resultado na tela


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

Postagens mais visitadas deste blog

PHP Orientado a Objetos – criando Classes, Atributos e Métodos

PHP Orientado a Objetos – criando Atributos e Métodos Estáticos.

O que é back-end ?

Essa forma de desenvolvimento se relaciona com o que está por trás das aplicações desenvolvidas na programação. Ou seja, tudo que dá estrutura e apoio às ações do usuário da máquina é chamado de back-end.

Quando acessamos um site, por exemplo, por trás de toda sua apresentação amigável esteticamente, há uma comunicação das informações trocadas entre banco de dados e navegador. Portanto, por trás da interface gráfica do realizador, o back-end está sempre agindo.