Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Metodos magicos __sleep y __wakeup ¿Alguna solución?

Estas en el tema de Metodos magicos __sleep y __wakeup ¿Alguna solución? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Metodos magicos __sleep y __wakeup ¿Alguna solución? Código PHP: <?php class  conexion {   public  $connect ;   public function  __sleep (){    $this -> connect =array( 'localhost' ...
  #1 (permalink)  
Antiguo 05/10/2016, 07:07
Avatar de skywolker  
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 195
Antigüedad: 12 años, 8 meses
Puntos: 8
Pregunta Metodos magicos __sleep y __wakeup ¿Alguna solución?

Metodos magicos __sleep y __wakeup ¿Alguna solución?

Código PHP:

<?php
class conexion{

  public 
$connect;

  public function 
__sleep(){

  
$this->connect=array('localhost','root','','my_database');
  echo 
"array conexion";

  }
  
    public function 
__wakeup (){
  
    
mysqli_connect($this->connect);
  
    echo  
"Conexion Establecida.";
  
    }


}
//class conexion


$imprime = new conexion;
var_dump($imprime);


?>
  #2 (permalink)  
Antiguo 07/10/2016, 11:51
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Metodos magicos __sleep y __wakeup ¿Alguna solución?

Que es lo que quieres hacer y cual el problema que se presenta ?
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 07/10/2016, 12:59
Avatar de skywolker  
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 195
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Metodos magicos __sleep y __wakeup ¿Alguna solución?

El constructor no recibe la variable $name dentro de la funcion y no puede ser llamada como el metodo magico __set($name,$valor) que encierra dos variables es llamado asi $myclass->name='Hola mundo';

Por otro lado:

Código PHP:


   
function __destruct() {
       print 
"Destruyendo " $this->name "\n";
   } 

El objeto es destruido ... pero como lo destruye si se necesita unset para ese proposito por lo que la funcion magica __unset es la que llama a unset($name); fuera de la funcion .

Espero alla quedado todo claro :

dejo los enlaces para mas informacion :

constructor y destructor:

http://php.net/manual/es/language.oop5.decon.php


metodo magico __unset:

http://php.net/manual/es/language.oo...p#object.unset

Código PHP:

 
/**  Desde PHP 5.1.0  */
    
public function __unset($name)
    {
        echo 
"Eliminando '$name'\n";
        unset(
$this->data[$name]);
    } 
  #4 (permalink)  
Antiguo 09/10/2016, 14:57
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Metodos magicos __sleep y __wakeup ¿Alguna solución?

Cita:
El constructor no recibe la variable $name dentro de la funcion y no puede ser llamada como el metodo magico __set($name,$valor) que encierra dos variables es llamado asi $myclass->name='Hola mundo';
Es normal el constructor solo inicializa variables y se llama una vez, así que despues de instanciar el objeto con new la propiedad $name vale null y por ende no existe ninguna key en el arreglo $data. En otras palabras es el comportamiento esperado.
Cita:
El objeto es destruido ... pero como lo destruye si se necesita unset para ese proposito por lo que la funcion magica __unset es la que llama a unset($name); fuera de la funcion .
Error no requieres __unset para destruir el objeto, el método mágico se utiliza cuando usas isset o unset en propiedades que no son visibles fuera del objeto (protected y private)

Espero que en lo futuro acostumbres a documentar mejor tus dudas.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: alguna, conexion, metodos, php, sleep
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:15.