2014-01-10 3 views
-2

Я искал Google и стекировал форумы переполнения в течение нескольких часов и не нашел ничего, кроме функции get_declared_classes, которая возвращает только имя класса, oppsed к объявленному имени объекта.Название объявленного класса в php

Вот что я пытаюсь сделать: мне нужно получить все имена объявленного объекта внутри страницы, чтобы он мог полностью вернуть область действия, потому что я работаю над большим проектом работы с фреймворком mvc, где у некоторых экземпляров класса есть динамические имена.

Например

$a = new foo(); 
$b = new foo(); 
$c = new foo(); 

$x = new bar(); 
$y = new bar(); 
$z = new bar(); 

Мне нужна функция, которая возвращает а, Ь, сх, у, г на основе входного имени класса

например

function blah(foo/bar){ 
return name of for/bar 
} 

Я не» t даже знаю, возможно ли это, но будет действительно полезно определить, как класс был объявлен.

+0

Я изо всех сил, чтобы понять, что вы имеете в виду. Будет ли 'var_dump ($ this);' делать то, что вам нужно? – Ryan

+1

Вы должны прочитать об отражении в PHP http://il1.php.net/manual/en/intro.reflection.php –

+0

var_dump возвращает информацию о конкретной переменной, мне нужен список экземпляров класса, который я не знаю имя выключено. –

ответ

2

Надеюсь, что я правильно понял вас.

  1. Получить все определенные переменные: get_defined_vars()

  2. Фильтр объектов по типу: is_object()


→ Ideone.com live version

class Bar { 
} 
$blub = new Bar(); 

$vars = get_defined_vars(); 
$vars = array_filter($vars, function($var) { 
    return is_object($var) && $var instanceof Bar; 
}); 

foreach ($vars as $object) { 
    echo 'There is one "Bar"!'; 
} 

Вы можете lso используйте get_class() для динамической проверки имени класса. → Ideone.com live version

class Bar {} 
class Foo {} 

// we do not want them to be listed in the output 
class EvilBar {} 
class EvilFoo {} 

$a = new Bar(); 
$b = new Foo(); 
$c = new EvilBar(); 
$d = new EvilFoo(); 

$vars = get_defined_vars(); 
$vars = array_filter($vars, function($var) { 
    return is_object($var) && strpos(get_class($var), 'Evil') !== 0; 
}); 

foreach ($vars as $object) { 
    // Doesn't begin with "Evil" 
    if (strpos(get_class($object), 'Evil') !== 0) { 
     echo 'There is one non-evil object and its class name is: ', get_class($object), "\r\n"; 
    } 
} 
+0

После того, как я опубликовал свой ответ, я решил, что это то, что, как я думал, он считает, - я думаю, вы «Правильно с этим. +1 –

+1

Хотя, возможно, для перечисления всех экземпляров объектов, а не всех объектов определенного типа, просто foreach ($ vars as $ object) echo get_class ($ object); –

+0

Обратите внимание, что правила изменения переменных все еще применяются –

Смежные вопросы