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

    prelevare istanze di una classe

    Ciao!
    Come posso prelevare il nome delle istanze di un oggetto / classe in PHP5?
    Ho trovato le funzioni get_class, get_class_vars, get_object_vars... ma qualcosa non funziona...

    se avessi l'oggetto "a", contenuto nella seguente classe:
    Codice PHP:
    class {    
          private 
    $num//variabile intera    
          
    private $obj = array(); //vettore di oggetti "b"

        //costruttore a [...] 

    Con le struzioni:
    Codice PHP:
    $x get_class_vars(get_class("a"));
    print_r($x);

    //oppure

    $x get_object_vars("a");
    print_r($x); 
    Ottengo come risultato un array vuoto. Se togliessi "private $obj = array()" invece otterrei un risultato correto.
    Io vorrei ottenere una cosa del tipo:
    num=>int, obj=>b

    Come posso risolvere il problema?

  2. #2
    Per prima cosa, sia get_class() che get_object_vars() richiedono un oggetto, non una stringa come parametro.

    Poi:

    Codice PHP:
    <pre>
    <?php 

    class Test {
        private 
    $num;
        
        function 
    GetVars() {
            return 
    get_object_vars($this);
        }
    }

    $t = new Test();

    print_r(get_object_vars($t));

    print_r($t->GetVars());

    ?>
    </pre>
    E' ovvio che dall'esterno di una classe tu NON possa accedere alle proprietà private, altrimenti che ci starebbero a fare?

  3. #3
    veramente la funzione vuole una stringa che rappreseti la classe. Infatti funziona dandogli la stringa che rappresenta la classe! Anche passandogli $object funziona ovviamente!
    Lo so che le istanze private non sono visibili dall'esterno! ma queste funzioni mi permettono di leggere appunto le istanze, che è quello che a me serve.
    Il mio problema è che le istanze "semplici" del tipo:
    private $x = 2;
    private $ciao = "hello world";
    non mi danno nessun problema!

    ma se avessi
    private $vet_obj = vettore(); //vettore di oggetti

    ecco che la funzione get_class_vars o get_object_vars non è più in grado di restituirmi il corretto risultato, mi da solo un "Array" (array vuoto)

    Come posso fare?
    Grazie 1000 della risposta precedente cmq =)

  4. #4
    Originariamente inviato da ajaxSensitive
    veramente la funzione vuole una stringa che rappreseti la classe.
    Si, certo ...

    http://www.php.net/get_class
    Parameters
    object: The tested object

    http://www.php.net/get_object_vars
    Parameters
    object: An object instance.

    Originariamente inviato da ajaxSensitive
    Lo so che le istanze private non sono visibili dall'esterno!
    ...
    ma se avessi
    private $vet_obj = vettore(); //vettore di oggetti

    ecco che la funzione get_class_vars o get_object_vars non è più in grado di restituirmi il corretto risultato, mi da solo un "Array" (array vuoto)
    A me funziona perfettamente come da manuale:

    Codice PHP:
    <pre>
    <?php 

    class Test {
        private 
    $num;
        private 
    $test = array();
        
        function 
    GetVars() {
            return 
    get_object_vars($this);
        }
        
        function 
    Fill() {
            
    $this->test range(110);
        }
    }

    $t = new Test();

    print_r(get_object_vars($t));

    print_r($t->GetVars());

    $t->Fill();

    print_r(get_object_vars($t));

    print_r($t->GetVars());

    ?>
    </pre>

  5. #5
    Scusa... la parte che che può ricevere una stringa che rapprenseta il nome della classe è un mio errore / puttanata... comunque il mio problema non è questo;
    se un istanza rappresenta un vettore di oggetti, la funzione mi restituisce un vettore vuoto.

    class a {
    private $num = 5;
    private $v = array(); //array di oggetti
    }

    $obj = new a;
    print_r(get_class_vars(get_class($obj)); //restituisce "Array" invece di array(num=>5, array(istanze di obj oppure obj))

    ???

  6. #6
    Come da manuale:

    get_class_vars(): Get the default properties of the given class.

    NON si parla di istanze.

  7. #7
    Ok sei stato chiarissimo!

    Forse mi puoi anche dare un consiglio:
    Io dovrei creare un metodo "crea" in una classe "creaTabella".
    Passato come parametro ingresso una classe qualsiasi al metodo "crea", quest'ultimo prende le proprietà della classe, e da queste crea una tabella. Quindi le proprietà rappresentano i campi della tabella. Poi la tabella viene completata aggiungendo i valori delle varie proprietà... (il metodo "crea" quindi deve essere generalizzato)
    Il metodo GetVars() funziona benissimo, però se facessi così significa che la classe passata in input a "crea" deve contenere questa funziona... io lo vorrei evitare... hai qualche consiglio da darmi?
    Grazie!!!

    PS ma queste "proprietà", non sono le istanze...?

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.