Em novembro teremos o lançamento da versão 8.4 do nosso querido PHP e com ela teremos um novo recurso muito aguardado pela comunidade: o property hooks! Inspirado por outras linguagens como C#, Swift e Kotlin esse novo recurso tira a gambiarra dos métodos mágicos __set() e __get().
Vou mostrar um exemplo de como faz atualmente para termos getter e setters sem precisar criar a propriedade como privativa e criar dois novos métodos com nomes diferentes da propriedades.
class Foo { private String $bar; public function __set($name, $value) { $this->$name = $value . "!!!"; } public function __get($name) { return "!!!" . $this->$name; } }
Usando o __get() e __set() consigo deixar o $bar público quando defino valor e quando busco o valor, porém com implementação diferente e sem ter que criar métodos com nomes distintos da propriedade. Em exemplo visual ficaria assim o uso:
$foo = new Foo(); $foo->bar = "new release"; // aqui o valor que ficará salvo seria "new release!!!" echo $foo->bar; // aqui retornaria "!!!new release!!!"
Agora imagine como ficaria o __get() e __set() com outras propriedades, uma confusão total. Outra maneira de fazer isso seria criando um método getBar() e um outro setBar(), mas isso considerando apenas uma propriedade e no uso ficaria diferente do anterior:
class Foo { private String $bar; public function setBar($value) { $this->bar = $value . "!!!"; } public function getBar() { return "!!!" . $this->bar; } } $foo = new Foo(); $foo->setBar('new release'); // aqui o valor que ficará salvo seria "new release!!!" echo $foo->getBar(); // aqui retornaria "!!!new release!!!"
Eu particularmente acho meio chato criar novos métodos para esse caso de uso, prefiro muito usar a chamada direta da propriedade tanto para pegar quando definir seu valor. Esse novo recurso chega para resolver essa bagunça e permitir definir o get e set individualmente junto com a declaração na classe.
class Foo { public String $bar { set (String $value) => $this->bar = $value . "!!!"; get => "!!! . $this->bar"; } }
Esse novo código faz a mesma coisa porém individualmente, sem criar novos métodos ou utilizar __get() e __set() que precisam de tratamento para cada propriedade e a classe tiver.
Agora é só aguardar o lançamento desse novo recurso que deverá sair dia 21 de novembro!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3