PHP Velho Oeste 2024

Construtores

Construtores são funções em uma classe que são automaticamente chamadas quando você cria uma nova instância de uma classe utilizando o operador new. Um método se torna um construtor, quando ele possui o mesmo nome que sua classe. Se uma classe não tem método construtor, o construtor da classe base (classe 'pai') será então chamado, se existir.

<?php
class Auto_Cart extends Cart {
    function 
Auto_Cart() {
        
$this->add_item("10"1);
    }
}
?>

Isto define a classe Auto_Cart que é um Cart com a adição de um construtor que inicializa o carrinho com um item do artigo de número "10" toda vez que um novo Auto_Cart é criado utilizando "new". Construtores podem receber argumentos e estes podem ser opcionais, o que os tornam muito mais úteis. Para ser possível utilizar a classe sem parâmetros, todos os parâmetros do construtor devem ser criados como opicionais atribuindo-se valores padrões para os mesmos.

<?php
class Constructor_Cart extends Cart {
    function 
Constructor_Cart($item "10"$num 1) {
        
$this->add_item ($item$num);
    }
}
 
// Utilizando os valores padrões presentes no construtor
$default_cart = new Constructor_Cart;
 
// Setando novos parâmetros
$different_cart = new Constructor_Cart("20"17);
?>

Você também pode utilizar o operador @ para esconder os erros que podem ocorrer no construtor, ex.: @new.

<?php
class A
{
    function 
A()
    {
        echo 
"Eu sou o construtor de A.<br />\n";
    }

    function 
B()
    {
        echo 
"Eu sou um método qualquer chamado B pertencente a classe A.<br />\n";
        echo 
"Eu não sou o construtor de A.<br />\n";
    }
}

class 
extends A
{
}

// Isto irá chamar B() como o construtor de B.
$b = new B;
?>

O método B() da classe A irá se tornar o construtor da classe B, apesar de que essa talvez não fosse a real intenção. O PHP 4 não se importa se o método foi definido na classe B ou se foi herdado.

Cuidado

O PHP não chama automaticamente os construtores das classes bases em um construtor de uma classe derivada. É de sua responsabilidade propagar a chamada apropriadamente, sempre que ache necessário.

Destrutores são métodos que são chamados automaticamente quando um objeto é destruido, seja via unset() ou simplesmente pela finalização do escopo. Não existem destrutores em PHP. Você pode utilizar register_shutdown_function() para simular a maioria dos efeitos dos destrutores.

add a note add a note

User Contributed Notes 2 notes

up
0
Anonymous
9 years ago
I only just noticed this page is specifically referring to PHP 4, so I'd suggest changing
"There are no destructors in PHP."
to
"There are no destructors in PHP 4. Support for destructors was added in PHP 5."
up
0
Anonymous
9 years ago
"There are no destructors in PHP. You may use register_shutdown_function() instead to simulate most effects of destructors. "

I thought this was a particularly strange statement, seeing as that I use __construct() en __destruct() the whole time. And surely, from http://php.net/manual/en/language.oop5.decon.php we can read this:

"void __destruct ( void )
PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as there are no other references to a particular object, or in any order during the shutdown sequence. "

And even:
"The destructor will be called even if script execution is stopped using exit(). Calling exit() in a destructor will prevent the remaining shutdown routines from executing."

So PHP definitely supports destructors.
To Top