0

PHP5 - Construtores e Destrutores

criado por Marcelo Pereira Fonseca da Silva em 03/05/2004 9:55am
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"

<?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.

Comentários:

Mostrando 1 - 10 de 20 comentários
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 (~19 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 (~19 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!"
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!
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
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!
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...
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
15/05/2004 1:53pm (~20 anos atrás)

Olavo
talvez isso possa fazer a diferença das demais linguagens
08/05/2004 7: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...
07/05/2004 12:19pm (~20 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)