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

    __get multipli in una classe

    Ciao a tutti.
    Vorrei sottoporvi una domanda: vorrei avere la possibilità di accedere a dei campi interni della classe tramite il __get ricorsivo. Mi spiego meglio:

    codice:
    class demo
    {  
        protected $prova = array ('foo' => array ('a' => '1', 'b' => '0'), 'bar' => array ('c' => '2','d' => '3'));
        function __construct( )
        {
        }
        function __get( $name )
        {
        	$result = null;
            if (array_key_exists($name, $this->prova)) {
                $result = $this->prova[$name];
            }
            return $result;
        }
    
    
    }
    
    $x = new demo ;
    
    echo "{$x->foo->a} ;
    echo "{$x->laura->b} ;
    ?>
    Vorrei accedere al campo a dell'array foo contenuto in $prova tramite il metodo __get! Ho visto che la classe SimpleXMLElement ne fa uso, ma non ho capito come fa!
    Potete aiutarmi?

    Grazie
    Marco
    warcomeb - IL LEADER O.O.O.

  2. #2
    Codice PHP:
    class demo
    {
        protected 
    $prova = array ('foo' => array ('a' => '1''b' => '0'), 'bar' => array ('c' => '2','d' => '3'));
        function 
    __construct( )
        {
        }
        function 
    __get$name )
        {
            return 
    $this->prova[$name];
        }


    }

    $x = new demo ;


    echo 
    $x->foo['a']; 
    codice:
    1

  3. #3
    Quote Originariamente inviata da Skillsfactory Visualizza il messaggio
    Codice PHP:
    class demo
    {
        protected 
    $prova = array ('foo' => array ('a' => '1''b' => '0'), 'bar' => array ('c' => '2','d' => '3'));
        function 
    __construct( )
        {
        }
        function 
    __get$name )
        {
            return 
    $this->prova[$name];
        }


    }

    $x = new demo ;


    echo 
    $x->foo['a']; 
    Quindi un modo diretto tipo
    codice:
    echo $x->foo->a;
    non esiste?
    warcomeb - IL LEADER O.O.O.

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Se foo contiene un array, come fai ad utilizzare -> ?
    Se invece era un oggetto derivato da classe era corretto

  5. #5
    Ciao, potresti fare un cast ad object nel metodo __get. Mi spiego:
    Codice PHP:
    function __get($name){
          return (object)
    $this->prova[$name];

    In questo modo l'array associativo che ritorna __get nel tuo caso viene trasformato in un oggetto e quindi puoi chiamare $x->foo->a come dicevi tu. Il problema sorge nel momento in cui $this->prova[$name] non contiene un array associativo, quindi...da usare con cautela
    http://www.morialberto.it

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.