Atención |
En PHP 3 y PHP 4 los constructores se comportan de forma diferente. La semántica de PHP 4 se prefiere considerablemente. |
Los constructores son funciones en una clase que son llamadas automáticamente cuando se crea una nueva instancia de una clase con new. En PHP 3, una función se convierte en constructor si tiene el mismo nombre que la clase. En PHP 4, una función se convierte en constructor cuando tiene el mismo nombre que la clase en donde es definida - la diferencia es sutil, pero crucial (vea más adelante).
<?php |
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 |
También puede usar el operador @ para callar los errores que ocurren en el constructor, p.ej. @new.
Atención |
En PHP 3, las clases derivadas y los constructores tienen un número de limitaciones. Lo siguientes ejemplos deben ser leídos cuidadosamente para entender esas limitaciones. |
<?php |
En PHP 3, no se está llamando un constructor en el ejemplo anterior. La regla en PHP 3 es: 'Un constructor es una función del mismo nombre que la clase.'. El nombre de la clase es B, y no hay una función llamada B() en la clase B. Nada ocurre.
Esto se corrige en PHP 4 al introducir otra regla: Si una clase no tiene constructor, el constructor de la clase base es llamado, si existe. El ejemplo anterior habría impreso 'Soy el constructor de A.<br />' en PHP 4.
<?php |
En PHP 3, 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. La regla en PHP 3 es: 'Un constructor es una función con el mismo nombre de la clase.'. A PHP 3 no le importa si la función está siendo definida en la clase B, o si ha sido heredada.
Esto se corrige en PHP 4 modificando la regla a: 'Un constructor es una función del mismo nombre de la clase en la que se define.'. Por lo tanto, en PHP4, la clase B no tendría una función constructora propia y el constructor de la clase base hubiera sido llamado, imprimiendo 'Soy el constructor de A.<br />'.
Atención |
Ni PHP 3 o PHP 4 llaman 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. |
Nota: No hay destructores en PHP 3 o PHP 4. Puede usar register_shutdown_function() en su lugar para emular la mayoría de efectos de los destructores.
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.