PHP Velho Oeste 2024

Constructores

Los constructores son funciones en una clase que son invocadas automáticamente cuando se crea una nueva instancia de una clase con new. Una función se vuelve un constructor, cuando tiene el mismo nombre que la clase. Si una clase no tiene constructor, el constructor de la clase base será invocado, si es que existe.

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

Esto define una clase Auto_Cart que es una Cart más un constructor que inicializa el carrito con un elemento del artículo número "10" en cada ocasión que un nuevo Auto_Cart es creado con "new". Los constructores pueden llevar argumentos y estos argumentos pueden ser opcionales, lo que los hace mucho más útiles. Para poder seguir utilizando la clase sin parámetros, todos los parámetros para los constructores deben hacerse opcionales proporcionando los valores por omisión.

<?php
class Constructor_Cart extends Cart {
    function 
Constructor_Cart($item "10"$num 1) {
        
$this->add_item ($item$num);
    }
}
 
// Comprar las mismas cosas aburridas de siempre.
$default_cart = new Constructor_Cart;
 
// Comprar en serio...
$different_cart = new Constructor_Cart("20"17);
?>

También se puede utilizar el operador @ para callar los errores que ocurren en el constructor, para ejemplo @new.

<?php
class A
{
    function 
A()
    {
        echo 
"I am the constructor of A.<br />\n";
    }

    function 
B()
    {
        echo 
"I am a regular function named B in class A.<br />\n";
        echo 
"I am not a constructor in A.<br />\n";
    }
}

class 
extends A
{
}

// Esto invocará a B() como un constructor
$b = new B;
?>

La función B() en la clase A repentinamente se volverá un constructor en la clase B, aunque nunca fue la intención que lo fuera. A PHP 4 no le importa si la función ha sido definida en la clase B, o si ha sido heredada.

Precaución

PHP no llama automáticamente a los constructores de la clase base desde un constructor de una clase derivada. Es su responsabilidad propagar la llamada a los constructores en la jerarquía superior cuando sea apropiado.

Los destructores son funciones que son invocadas automáticamente cuando un objeto es destruido, ya sea con unset() o simplemente al salir del alcance. No existen destructores en PHP. En cambio, se puede utilizar register_shutdown_function() para simular la mayoría de los efectos de los destructores.

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