Ver Mensaje Individual
  #35 (permalink)  
Antiguo 20/01/2005, 08:01
Avatar de Calisco
Calisco
 
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 10 meses
Puntos: 4
Metodos Magicos.

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:
Cita:
Hola
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";
?>
__________________
| Cabeza De Raton |

Última edición por Calisco; 20/01/2005 a las 12:13