Métodos mágicos do PHP5
Quando você cria uma classe e define o método __construct(), ele será chamado sempre que um novo objeto baseado nessa classe é criado. Na definição de __construct() você pode incluir as rotinas que sejam necessárias para a inicializalação do objeto, antes que ele seja utilizado.
No exemplo acima, quando o código for executado, a saída será:
Você não chamou o método __construct(), mas ele foi executado. Essa é a mágica. Vamos incrementar esse método __construct(), pois da forma que está não tem utilidade alguma.
Agora o construtor recebe um parâmetro, o nome da pessoa, e armazena na propriedade $nome. Para funcionar é necessário passar uma string ao instanciar o objeto. A saída do exemplo acima será:
<?php class Pessoa { public function __construct() { print "Criando pessoa\n"; } } $Funcionario = new Pessoa(); ?>
No exemplo acima, quando o código for executado, a saída será:
Criando pessoa
Você não chamou o método __construct(), mas ele foi executado. Essa é a mágica. Vamos incrementar esse método __construct(), pois da forma que está não tem utilidade alguma.
<?php class Pessoa { protected $nome = ''; public function __construct($nome) { $this->nome = $nome; print "Criando pessoa $nome\\n"; } } $Funcionario = new Pessoa("Daniel Braga"); ?>
Agora o construtor recebe um parâmetro, o nome da pessoa, e armazena na propriedade $nome. Para funcionar é necessário passar uma string ao instanciar o objeto. A saída do exemplo acima será:
Criando pessoa Daniel Braga
Sim, existem. Estou preparando uma continução desse artigo para abordar o __get() e o __set().
02/01/2007 12:01pm
(~18 anos atrás)
Existem também os métodos __get() e __set() para desenvolver os getters e setters.
Eu ainda estou aprendendo um pouco sobre orientação a objetos, mas uma coisa que eu vi num livro que eu estou lendo (Code Complete) é que o uso desse tipo de funções é útil para garantir a independência total da classe, com uma encapsulação completa.
Eu ainda estou aprendendo um pouco sobre orientação a objetos, mas uma coisa que eu vi num livro que eu estou lendo (Code Complete) é que o uso desse tipo de funções é útil para garantir a independência total da classe, com uma encapsulação completa.
02/01/2007 11:58am
(~18 anos atrás)
Há um tanto de inutilidade no ato de definir todos os getters e setters de uma aplicação.
Será um código bem repetitivo e numa classe com várias propriedades você terá várias linhas de código para te atrapalhar na leitura do arquivo. Se seu editar não possuir code folding isso fica muito irritante.
Mas isso é uma opinião minha. Cada um tem que trabalhar da maneira que lhe for mais conveniente.
Será um código bem repetitivo e numa classe com várias propriedades você terá várias linhas de código para te atrapalhar na leitura do arquivo. Se seu editar não possuir code folding isso fica muito irritante.
Mas isso é uma opinião minha. Cada um tem que trabalhar da maneira que lhe for mais conveniente.
02/01/2007 10:01am
(~18 anos atrás)
Mas dessa forma você não acha que seus editores de código estão delimitando, restringindo, a forma como você trabalha?
02/01/2007 9:49am
(~18 anos atrás)
Mas dessa forma você não acha que seus editores de código não estão delimitando, restringindo, a forma como você trabalha?
02/01/2007 9:37am
(~18 anos atrás)
Seria mais conveniente sim. Inclusive é o padrão de codificação do Zend Framework. No entanto, utilizei o formato com underscore apenas para "colorir" o exemplo dado.
02/01/2007 9:34am
(~18 anos atrás)
Achei ótimo o artigo, porém quando falamos em OO, acho melhor determinar todos os getters e setters, sem processamento de código (automatização __call()).
Parabens pelo artigo.
Parabens pelo artigo.
27/12/2006 9:51am
(~18 anos atrás)
Não seria mais conveniente escrever as propriedades como camel caps e manter essa convenção em toda a classe? Isso pouparia a execução de código para transformar os nomes das propriedades no método __call(). Se existe uma razão para isso deveria ser explicada.
27/12/2006 7:04am
(~18 anos atrás)
Cara ... eu vinha usando essa técnica já há algum tempo, mas quando se programa com orientação a objetos usando Ferramentas com auto-completar de procedimentos (Zend e Komodo, por exemplo) esse recurso vai embora.
26/12/2006 9:17am
(~18 anos atrás)