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); получил бы меня "hello1". Спасибо.


person Yifan    schedule 04.05.2009    source источник
comment
Не хотел бы редактировать название, но оно немного вводит в заблуждение. Объявлен только один класс, class hello. Вы ищете экземпляры этого (или любого другого) класса и переменные, которые ссылаются на эти экземпляры.   -  person VolkerK    schedule 05.05.2009


Ответы (1)


Вы можете вызвать 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»?

person Samir Talwar    schedule 04.05.2009
comment
True.. и при необходимости комбинируйте с is_object, чтобы найти, какие vars являются объектами - person Petrunov; 05.05.2009
comment
Хорошо, спасибо, я искал get_defined_vars(), но я не знал, что там тоже есть объекты, я еще раз посмотрю, спасибо. - person Yifan; 05.05.2009