PHP5 - Construtores e Destrutores
Método Construtor
Na versão 4 do PHP geralmente dá-se um mesmo nome da classe para um método fazendo com que ele seja executado quando a instanciamos. Para quem não entendeu imagine a seguinte situação:
Iremos construir uma pequena classe chamada "Pao"
Como vimos no código acima temos a classe Pao e o método Pao() ao dar o mesmo nome da classe ao método, automaticamente temos um delicioso pão com manteiga.
E como isso funciona? Quando temos uma porção de código parecida com a que segue:
No Zend Engine 2 (a parte do PHP5 que lida com esses features de OO) existe um método para fazer isso tudo, sendo assim, não há a necessidade de se colocar um método com o mesmo nome da função.
Nosso mais novo amigo se chama __construct()
Vamos imaginar agora uma outra classe chamada "Casa" e vamos ver qual a diferença do código passado acima.
e então ao instanciar a nossa classe ..
Ele chama este método __construct() e já adiciona paredes.
Na versão 4 do PHP geralmente dá-se um mesmo nome da classe para um método fazendo com que ele seja executado quando a instanciamos. Para quem não entendeu imagine a seguinte situação:
Iremos construir uma pequena classe chamada "Pao"
<?php class Pao { /** * adiciona itens ao nosso pao */ var $_addItem; /** * Este Pao() seria o nosso método construtor * Nota: uma função dentro de uma classe recebe o nome de método. */ function Pao() { $this->_addItem = "manteiga"; } } ?>
Como vimos no código acima temos a classe Pao e o método Pao() ao dar o mesmo nome da classe ao método, automaticamente temos um delicioso pão com manteiga.
E como isso funciona? Quando temos uma porção de código parecida com a que segue:
<?php $objeto = new Pao(); ?>
No Zend Engine 2 (a parte do PHP5 que lida com esses features de OO) existe um método para fazer isso tudo, sendo assim, não há a necessidade de se colocar um método com o mesmo nome da função.
Nosso mais novo amigo se chama __construct()
Vamos imaginar agora uma outra classe chamada "Casa" e vamos ver qual a diferença do código passado acima.
<?php class Casa { /** * Define itens para a nossa casa */ var $item; /** * Esta é a forma de um método construtor * no PHP5. */ function __construct() { $this->item = "paredes"; } } ?>
e então ao instanciar a nossa classe ..
<?php $home_sweet_home = new Casa(); ?>
Ele chama este método __construct() e já adiciona paredes.
Corrigindo: Galera, adorei o artigo. Acho q não existe a necessidade de termos dois métodos com a mesma finalidade apenas porque existem pessoas que tem preguiça de migrar seus scripts para o php5, tendo que trocar tudo.
27/12/2004 2:26pm
(~20 anos atrás)
Galera, adorei o artigo. Acho q não existe a necessidade de termos dois métodos com o mesmo nome apenas porque existem pessoas que tem preguiça de migrar seus scripts para o php5, tendo que trocar tudo.
27/12/2004 2:24pm
(~20 anos atrás)
Correção do post anterior:
"Só DIZ que não há mais necessidade de se colocar um método com o mesmo nome da CLASSE, mas isso não significa em momento algum que essa funcionalidade deixa de existir!"
"Só DIZ que não há mais necessidade de se colocar um método com o mesmo nome da CLASSE, mas isso não significa em momento algum que essa funcionalidade deixa de existir!"
27/05/2004 10:12am
(~20 anos atrás)
Tudo bem, entendi... mas em nenhum momento o artigo diz que não vai mais existir o modo antigo (usando o nome da classe).
"No Zend Engine 2 (a parte do PHP5 que lida com esses features de OO) existe um método para fazer isso tudo, sendo assim, não há a necessidade de se colocar um método com o mesmo nome da função."
Só que não há mais necessidade de se colocar um método com o mesmo nome da função, mas isso não significa em momento algum que essa funcionalidade deixa de existir!
Att!
"No Zend Engine 2 (a parte do PHP5 que lida com esses features de OO) existe um método para fazer isso tudo, sendo assim, não há a necessidade de se colocar um método com o mesmo nome da função."
Só que não há mais necessidade de se colocar um método com o mesmo nome da função, mas isso não significa em momento algum que essa funcionalidade deixa de existir!
Att!
27/05/2004 10:09am
(~20 anos atrás)
bom, na verdade lamentável é esquecer de ler o artigo..
o que é proposto no PHP 5 é exatamente o que voce comentou Marcos
usaremos agora palavras reservadas
em relação ao modo antigo acredito que ele ainda continue como aconteceu com as variáveis globais $_POST que era $HTTP_POST_VARS
o que é proposto no PHP 5 é exatamente o que voce comentou Marcos
usaremos agora palavras reservadas
em relação ao modo antigo acredito que ele ainda continue como aconteceu com as variáveis globais $_POST que era $HTTP_POST_VARS
21/05/2004 6:20am
(~20 anos atrás)
Pra que inventar moda? Usem o mesmo nome da classe ou se não usem uma palavra reservada tipo no delphi (constructor e descturctor..)
Alias, continua valendo usar o mesmo nome da classe?
See yah!
Alias, continua valendo usar o mesmo nome da classe?
See yah!
20/05/2004 8:43pm
(~20 anos atrás)
A maioria dos programadores aprendeu desde que se conhecem por gente que um método que recebe O MESMO NOME DA CLASSE é um construtor, isso tornou-se um padrão, por assim dizer (acho que graças ao Java).
Eu acho que essa mudança não fez muita diferença, apenas ao invés de colocar o nome da classe, coloca-se "_constructor()", eu só acho que deveria haver a possibilidade de usar-mos das duas maneiras, para não ter que ficar modificando códigos. Nesse caso não é uma mudança muito extraordinária. Não sou contra evoluções no php, mas eu acho que existem outras coisas mais importantes para melhorar que ficar apenas trocando termos. É o que eu acho...
Eu acho que essa mudança não fez muita diferença, apenas ao invés de colocar o nome da classe, coloca-se "_constructor()", eu só acho que deveria haver a possibilidade de usar-mos das duas maneiras, para não ter que ficar modificando códigos. Nesse caso não é uma mudança muito extraordinária. Não sou contra evoluções no php, mas eu acho que existem outras coisas mais importantes para melhorar que ficar apenas trocando termos. É o que eu acho...
17/05/2004 12:52pm
(~20 anos atrás)
Bom, que o php tem que melhorar e evoluir todos nós concordamos. Que a orientação a objetos faz parte disso também todos nós concordamos, e também concordamos que o php 5 é uma evolução enorme. Certo, agora mudar a sintax de construtores e destrutores não tem nada que ver com isso! Se não vejamos: c, c++ e java são linguagens espetaculares. Se a mudansa na sintax do php é assim tão melhor, tão revolucinária, tão iluminada, então vamos mudar a sintax das outras também! Acho simplismente ridículo! Tudo bem, mentalidade aberta, mudansas de conceito certo, mas e a portabilidade de códigos? Por que dificultar? Eu era programador c++ e aprendi php sem problemas justamente por isso (ponto de vista de sintax), assim como um programador basic não tem dificuldades com asp, mas se o php fosse todo cheio de "constructs" da vida em vez de ser em um padrão c eu iria ter muito mais dificuldades!
Uma linguagem pode ser boa sem que mudem sua sintax no meio da sua vida. O que aconteceria se mudassem a sintax do c++ hoje? E os "códigos velhos?".
Bom, essa é a minha opinião, não é a verdade absoluta, mas é o que eu sinseramente acho.
Marlon
Uma linguagem pode ser boa sem que mudem sua sintax no meio da sua vida. O que aconteceria se mudassem a sintax do c++ hoje? E os "códigos velhos?".
Bom, essa é a minha opinião, não é a verdade absoluta, mas é o que eu sinseramente acho.
Marlon
15/05/2004 1:53pm
(~20 anos atrás)
nao concordo...
acho q não seria necessário reservar uma palavra para um coisa que já é padrão em linguagens plenamente OO como C++ e Java...
cada um tem sua opnião, mas eu acho q complica sim...
acho q não seria necessário reservar uma palavra para um coisa que já é padrão em linguagens plenamente OO como C++ e Java...
cada um tem sua opnião, mas eu acho q complica sim...
07/05/2004 12:19pm
(~20 anos atrás)