Metodos Magicos
Los nombres de las funciones
__construct,
__destruct (ver Constructores y Destructores),
__call,
__get,
__set (ver Sobrecarga),
__sleep,
__wakeup, y
_toString son "magicas" en clases de PHP. No se puede tener funciones con estos nombres en ninguna de nuestras clases a menos que se quiera el funcionamiento "magico" de las mismas.
The function names __construct, __destruct (see Constructors and Destructors), __call, __get, __set (see Overloading), __sleep, __wakeup, and __toString are magical in PHP classes. You cannot have functions with these names in any of your classes unless you want the magic functionality associated with them.
Cita: Precaucion
PHP reserva todos los nombes de las funciones comenzando con __ (doble guion bajo) como magica. Es recomendable no usar nombres de funciones que con __ en PHP a menos que se quiera algun funcionamiento magico documemntado.
PHP reserves all function names starting with __ as magical. It is recommended that you do not use function names with __ in PHP unless you want some documented magic functionality.
__sleep and
__wakeup
La funcion serializacion
serialize () chequea si tu clase tiene una funcion con el nombre magico
__sleep. Si es asi, la funcion es ejecutada antes que cualquier serializacion. Se puede limpiar el objeto y se suspende el retorno de un array con los nombres de todas las variables del objeto que deberian ser serializadas.
serialize() checks if your class has a function with the magic name __sleep. If so, that function is executed prior to any serialization. It can clean up the object and is supposed to return an array with the names of all variables of that object that should be serialized.
El uso programado de
__sleep es para cerrar cualquier coneccion de base de datos que el objeto pueda llegar a tener, datos destinados pedientes o tareas de limpieza similares a efectuar. Ademas, la funcion es muy usada si se tiene objetos muy extensos que no necesitan ser completamente guardados.
The intended use of __sleep is to close any database connections that the object may have, commit pending data or perform similar cleanup tasks. Also, the function is useful if you have very large objects which do not need to be saved completely.
En cambio, la funcion
unserialize() se usa para chequear la presencia de una funcion con el nombre magico
__wakeup. Si esta presente, esta funcion puede reconstruir cualquier recursos que el objeto pueda tener.
Conversely, unserialize() checks for the presence of a function with the magic name __wakeup. If present, this function can reconstruct any resources that the object may have.
El uso programado de
__wakeup es para reestablecer cualquier coneccion de base de datos que se pueda haber perdido durante la serializacion y otros tareas de reinicializacion pendientes.
The intended use of __wakeup is to reestablish any database connections that may have been lost during serialization and perform other reinitialization tasks.
__toString
El metodo
__toString permite a una clase decidir como "reaccionara" cuando es usada como un string.
The __toString method allows a class to decide how it will react when it is converted to a string. Ejemplo 19-25. Ejemplo Simple Código PHP:
<?php
// Declaracion de una clase simple
class ClaseTest
{
public $foo;
public function __construct($foo) {
$this->foo = $foo;
}
public function __toString() {
return $this->foo;
}
}
$clase = new ClaseTest('Hola');
echo $clase;
?>
La salida del ejemplo anterior mostrara:
Es un valor nulo que el metodo
__toString solo sera llamado cuando este este diractemente combinado con
echo() o
print().
It is worth noting that the __toString method will only be called when it is directly combined with echo() or print().
Ejemplo 19-26. Casos de llamada a __toString Código PHP:
<?php
// Llamada a __toString
echo $clase;
// Llamada a __toString (todavia con un parametro normal para echo)
echo 'text', $clase;
// __toString not called (primero se utiliza el operador de concatenacion)
echo 'text' . $class;
// __toString not called (usado como un string)
echo (string) $class;
// __toString not called (usado como un string)
echo "text $class";
?>