dubbio su get_object_vars

  • Creatore Discussione Creatore Discussione Diamond
  • Data di inizio Data di inizio

Diamond

Nuovo Utente
9 Dic 2009
2
0
0
Ciao a tutti!
Ho una domanda da porvi, vi posto dei semplici pezzetti codice:

file -> a.php
PHP:
class a {
	private $num_a;
	private $str_a;
	
	//costruttore e metodi [...]
}

file -> b1.php
PHP:
class b1 {
	private $num_b;
	private $str_b;
	private $vet_obj_a = array(); //array di oggetti a
	
	//costruttore e metodi [...]
}

file -> b2.php
PHP:
class b2 {
	private $num_b;
	private $str_b;
	private $vet_obj_a = array(); //array di oggetti a
	
	//costruttore e metodi [...]
	
	public function getObjectVars() {
		return get_object_vars($this);
	}
}

file -> test.php
PHP:
$obj = new a();
print_r(get_object_vars($obj)); 
//stampa: Array() -> non posso vedere le proprietà private

$obj = new b1();
print_r(get_object_vars($obj));
//stampa: Array() -> non posso vedere le proprietà private

$obj = new b2();
print_r($obj->getObjectVars());
//stampa: Array ( [num_b] => [str_b] => [vet_obj_a] => Array ( ) ) -> in array dovrebberò però anche comparire i parametri di "a" ?

Sapreste rispondere alle domanda citata nei commenti trovai in "test.php"?
Quale sarebbe la soluzione migliore per ottenere un risultato simile a
"Array ( [num_b] => [str_b] => [vet_obj_a] => Array( [num_a] => [str_a] ) )" ? (Magari nella quale vengano anche specificati gli oggetti "a" e "b")

Grazie!!!
 
Ultima modifica:
Sicuramente devono comparire anche gli elementi contenuti nella variabile della classe. Dopotutto get_object_vars restituisce i valori, quindi immagino che non stia a controllare se una variabile è un array o meno. Ma perché questa domanda? A te non funziona?
 
Io ho creato una funzione "stampaParametri", ma non funziona come dovrebbe.
Potresti dare un occhiata al codice e darmi qualche dritta o dirmi dove sta l'errore?
(O forse si potrebbe scrivere questa funzione in maniera più semplice?)

PHP:
class a {
	private $num_a = 3;
	private $str_a = "ciao_mondo";
	
	function __construct() {}
	
	public function getVars() {
		return get_object_vars($this);
	}
}


class b {
	private $num_b = 5;
	private $str_b = "hello_world";
	private $vet_obj_a = array(); //array di oggetti a
	private $vet_b = array(0=>1, 1=>2, 2=>3);
	
	function __construct() {
		$a = new a(); 
		$this->vet_obj_a[] = $a;
	}
	
	public function getVars() {
		return get_object_vars($this);
	}
	
	
	public static function stampaParametri($v = array(), $html) {
		
		if( count($v) == 0 ) return $html;

		foreach($v as $name => $value) {
			
			if( is_array($value) ) {
				return b::stampaParametri($value, $html);
			}
			
			else if( is_object($value) ) {
				$html .= "<br />" . get_class($value) . "<br />";
				$parametri = $value->GetVars();
				return b::stampaParametri($parametri, $html);
			}
			
			else {
				$html .= $name . " -> " . $value . "<br />";
			}
		}
		return $html;
	}
	
}

//test
$b1 = new b();
$b2 = new b();
$test = array($b1, $b2);
print_r( b::stampaParametri($test, "") );

/* QUESTO E' QUELLO CHE OTTENGO:
b
num_b -> 5
str_b -> hello_world

a
num_a -> 3
str_a -> ciao_mondo

MA IN "b" DOVREBBE ANCHE STAMPARMI "vet_b", perchè non lo stampa?
ci deve essere un errore in "stampaParametri".... ? ? ?
*/
 

Discussioni simili

M
Risposte
6
Visite
3K
HTML e CSS
Membro cancellato 26246
M