我已经搜索了谷歌和堆栈溢出论坛几个小时,除了get_declared_classes函数之外什么都没找到,它只返回被声明对象名称的类名。
这里我要做的是:我需要在页面中获取声明对象的所有名称,以便它可以基本返回范围,因为我正在处理一个大型mvc框架工作项目,其中一些类实例具有动态名。
例如
$a = new foo();
$b = new foo();
$c = new foo();
$x = new bar();
$y = new bar();
$z = new bar();
我需要一个根据类名输入返回a,b,c x,y,z的函数
例如
function blah(foo / bar){
return name of for / bar
}
我甚至不知道这是否可行,但确定该类的声明方式确实很有用。
答案 0 :(得分:2)
我希望我能正确理解你。
获取所有已定义的变量:get_defined_vars()
按类型过滤对象:is_object()
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"!';
}
您还可以使用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";
}
}