Métodos mágicos

Los nombres de función: __construct, __destruct (see Constructores y Destructores), __call, __get, __set (see Sobrecarga), __sleep, __wakeup, y __toString son mágicos en las clases de PHP. No puede tener funciones con esos nombres en cualquiera de sus clases a menos que se desee la funcionalidad mágica asociada con ellos.

Atención

PHP reserva todos los nombres de funciones que empiecen con __ como mágicas. Es recomendado que no use nombres de funciones con __ en PHP a menos que dese alguna mágica funcionalidad documentada.

__sleep y __wakeup

serialize() checa si su clase tiene una función con el nombre má __sleep. Si es así, esa función es ejecutada antes de cualquier serialización. Esta puede limpiar el objeto y se espera que regrese una matriz con los nombres de todas las variables de ese objeto que puede ser serializadas.

La intención de usar __sleep es cerrar cualquier conexión a base de datos que el objeto pueda tener, terminar de enviar cualquier dato o ejecutar tareas similares de limpieza. También, la función es útil si tiene objetos muy grandes los cuales no necesitan mantenerse completos.

Inversamente, unserialize() checa por la presencia de una función con el nombre mágico __wakeup. Si está presente, está función puede reconstruir cualquier recurso que el objeto pueda tener.

La intención de __wakeup es reestablecer cualquier conexión a base de datos que se pueda haber perdido durante la serialización y ejecutar otras tareas de reinicialización.

__toString

El método __toString permite a una clase decidir como actuar cuando es convertida en cadena.

Ejemplo 19-25. Ejemplo simple

<?php
// Declare a simple class
class TestClass
{
    
public $foo;

    
public function __construct($foo) {
        
$this->foo = $foo;
    }

    
public function __toString() {
        return
$this->foo;
    }
}

$class = new TestClass('Hello');
echo
$class;
?>

El resultado del ejemplo seria:

Hello

No tiene otro valor que cuando el método __toString es llamado solo cuando es directamente combinado con echo() o print().

Ejemplo 19-26. Casos donde __toString es llamado

<?php
// __toString called
echo $class;

// __toString called (still a normal parameter for echo)
echo 'text', $class;

// __toString not called (concatenation operator used first)
echo 'text' . $class;

// __toString not called (cast to string first)
echo (string) $class;

// __toString not called (cast to string first)
echo "text $class";
?>

Hosting by: hurra.com
Generated: 2007-01-26 18:01:09