Los constructores son funciones en una clase que son llamadas automáticamente cuando se crea una nueva instancia de una clase con new. Una función se convierte en constructor cuando tiene el mismo nombre que la clase. Si una clase no tiene constructor, el constructor de la clase base será llamado, si existe.
<?php
class Auto_Carrito extends Carrito {
function Auto_Carrito() {
$this->agregar_item("10", 1);
}
}
?>
Esto define una clase Auto_Carrito que es un Carrito más un constructor que inicializa el carrito con un item del número de artículo "10" cada vez que un nuevo Auto_Carrito se crea con "new". Los constructores pueden recibir argumentos y tales argumentos pueden ser opcionales, lo que los hace mucho más útiles. Para poder usar aun la clase sin parámetros, todos los parámetros deben ser opcionales, al proveer valores predeterminados.
<?php
class Constructor_Carrito extends Carrito {
function Constructor_Carrito($item = "10", $num = 1) {
$this->agregar_item ($item, $num);
}
}
// Comprar lo mismo de antes.
$carrito_predeterminado = new Constructor_Carrito;
// Comprar esta vez en serio...
$carrito_diferente = new Constructor_Carrito("20", 17);
?>
También puede usar el operador @ para callar los errores que ocurren en el constructor, p.ej. @new.
<?php
class A
{
function A()
{
echo "Soy el constructor de A.<br />\n";
}
function B()
{
echo "Soy una función regular llamada B en la clase A.<br />\n";
echo "No soy un constructor en A.<br />\n";
}
}
class B extends A
{
}
// Esto llama a B() como un constructor
$b = new B;
?>
La función B() en la clase A se convertirá de repente en un constructor en la clase B, aun cuando nunca fue esa la intención. A PHP 4 no le importa si la función está siendo definida en la clase B, o si ha sido heredada.
PHP 4 no llama constructores de la clase base automáticamente desde un constructor de una clase derivada. Es su responsabilidad propagar la llamada a constructores más arriba en la jerarquía cuando sea apropiado.
Los destructores son funciones que son llamadas automáticamente cuando un objeto es destruido, ya sea con unset() o simplemente al finalizarse su contexto. No hay destructores en PHP. Es posible usar register_shutdown_function() en su lugar para simular la mayoría de efectos de los destructores.