2009-05-04 28 views
3

可以說,我有這樣的代碼:PHP顯示所有聲明類的名稱?

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

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

我如何得到它的回聲實例化對象的所有名稱(如果可能的話它們各自的類),使它回聲(可能在一個陣列)「hello1 => hello,hello2 => hello,hello4 => hello「。

如果這是不可能的,有沒有什麼辦法從類內部告訴實例的名字,比如echo instance_name($ this);會讓我「你好1」。謝謝。

+1

不想編輯標題,但它有點誤導。只有一個類聲明,class hello。您正在查找此(或任何其他)類的_instances_和引用這些實例的變量。 – VolkerK 2009-05-05 08:17:32

回答

9

你可以稱之爲get_defined_vars得到所有對象的數組目前,然後用get_class以獲取每一個類名(代碼沒有測試,但它應該工作):

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

僅供參考,你稱之爲「被聲明的階級」,更爲人所知的是「對象」。

你的第二個問題是不可能的。舉個例子來說:

$hello1 = $hello2 = new hello(); 

現在,如果我叫instance_name,它應該返回 'hello1' 或 'hello2'?

+0

True ..並與is_object結合,如果有必要找到哪些變量是對象 – Petrunov 2009-05-04 21:59:45