2009-05-04 14 views
3

Lets sagen, ich habe diesen Code:PHP zeigt Namen aller deklarierten Klassen?

<?php 
class hello { 
    var $greeting = "hello"; 
    function hello(){ 
     echo $this->greeting; 
     return; 
    } 
} 

$hello1 = new hello; 
$hello2 = new hello; 
$hello4 = new hello; 
?> 

Wie kann ich es alle Namen von instanziiert Objekten (und wenn möglich ihre jeweilige Klasse) Echo bekommen, so dass es echos (möglicherweise in einem Array) „hello1 => Hallo, Hallo2 => Hallo, Hallo4 => Hallo.

Wenn dies nicht möglich ist, gibt es eine Möglichkeit, den Namen der Instanz innerhalb der Klasse zu nennen, etwa echo instance_name ($ this); würde mich "Hallo1" bekommen. Vielen Dank.

+1

Ich möchte den Titel nicht bearbeiten, aber es ist ein bisschen irreführend. Es gibt nur eine Klasse, Klasse Hallo. Sie suchen nach _instances_ dieser (oder einer anderen) Klasse und Variablen, die auf diese Instanzen verweisen. – VolkerK

Antwort

9

Sie könnten get_defined_vars nennen eine Reihe von allen Objekten vorhanden ist, zu erhalten und dann get_class verwenden, um die Klassennamen für jeden zu bekommen (Code nicht getestet, aber es sollte funktionieren):

$vars = array(); 
foreach (get_defined_vars() as $var) { 
    $vars[$var] = get_class($var); 
} 

FYI, Was Sie eine "deklarierte Klasse" nennen, ist bekannter als "Objekt".

Ihre zweite Frage ist nicht möglich. Nehmen wir zum Beispiel:

$hello1 = $hello2 = new hello(); 

Nun, wenn ich instance_name nennen, sollte es zurückgeben 'hello1' oder 'hello2'?

+0

True .. und kombinieren mit is_object, falls notwendig, um zu finden, welche vars Objekte sind – Petrunov

+0

Ok, danke, ich habe get_defined_vars() gesucht, aber ich wusste nicht, dass Objekte auch drin sind, ich werde es nochmal bedanken, Vielen Dank. – Yifan