Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Metodo magico __set_state(), help me

    Ciao,
    stò studiando questa guida: http://php.html.it/guide/lezione/424...seconda-parte/

    mi trovo in difficoltà con il seguente listato:

    codice:
    <?php
    
    class MyClass{
    
        // PROPRIETÀ:
        public $a;
        public $b;
    
        /* METODO MAGICO __set_state(): viene azionato quando si esporta un oggetto
         * tramita la funzione var_export ed accetta un array che avrà le coppie
         * key/value impostate ai nomi/valori delle proprietà esportate */
        public static function __set_state($arr){
            $obj = new MyClass();        // Crea un nuovo oggetto istanza di MyClass
            $obj->a = $arr['a'];
            $obj->b = $arr['b'];
            return $obj;                // Ritorna il riferimento al nuovo oggetto
        }
    
     }
    
     $obj1 = new MyClass();     // Crea un nuovo oggetto istanza di MyClass
     $obj1->a = 10;             // Modifica la proprietà a
     $obj1->b = 20;             // Modifica la proprietà b
    
     eval('$obj2 = ' . var_export($obj1, true) . ';');
    
    ?>
    Quando lo vado a fari girare non mi si vede nulla...e non capisco neanche bene cosa dovrebbe fare...

    Praticamente...da quello che ho capito il metodo magico __set_state() viene richiamato automaticamente quando si esporta un oggetto in un altro oggetto con la funzione var_export()

    Praticamente che fà? Prende in input un array (che non ho ben capito cosa contiene)...crea un nuovo oggetti e che significano esattamente queste due assegnazioni?
    codice:
    $obj->a = $arr['a'];
    $obj->b = $arr['b'];
    Cosa significa inoltre l'ultima operazione fatta fuori dalla classe? eval('$obj2 = ' . var_export($obj1, true) . ';');

    Questo esempio non mi pare chiarissimo...

    Grazie
    Andrea

  2. #2
    nota un pò:

    Codice PHP:
    <?php

    class MyClass{

        
    // PROPRIETÀ:
        
    public $a;
        public 
    $b;
        public 
    $name;

        
    /* METODO MAGICO __set_state(): viene azionato quando si esporta un oggetto
         * tramita la funzione var_export ed accetta un array che avrà le coppie
         * key/value impostate ai nomi/valori delle proprietà esportate */
        
    public static function __set_state($arr){
            
    $obj = new MyClass();        // Crea un nuovo oggetto istanza di MyClass
            
    $obj->$arr['a'];
            
    $obj->$arr['b'];
            
    $obj->name $arr['name'];
            return 
    $obj;                // Ritorna il riferimento al nuovo oggetto
        
    }

     }

     
    $obj1 = new MyClass();     // Crea un nuovo oggetto istanza di MyClass
     
    $obj1->10;             // Modifica la proprietà a
     
    $obj1->20;             // Modifica la proprietà b
     
    $obj1->name 'classeA';    //per differenziarlo da quella che cloneremo
     
     
    var_export($obj1); //<---- hai notato che cosa ti stampa questa funzione?? : D

     
    eval('$obj2 ='.var_export($obj1,true).';');
     
    $obj2->name "classeB";
     
     
    var_dump($obj1);
     
    var_dump($obj2);

    ?>
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    come faremmo senza Santino83_02?

    ottima risposta, é stata utilissima anche a me

    grazie infinite
    Chi non crede in una cultura libera forse non
    ha mai provato un forum ma chi ha provato
    un forum e non crede in una cultura libera
    allora non é mai stato utile alla
    cultura altrui.

  4. #4
    Originariamente inviato da balestra_romani
    come faremmo senza Santino83_02?

    ottima risposta, é stata utilissima anche a me

    grazie infinite

    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.