php中声明的类的名称

时间:2014-01-10 15:56:43

标签: php class object

我已经搜索了谷歌和堆栈溢出论坛几个小时,除了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 
}

我甚至不知道这是否可行,但确定该类的声明方式确实很有用。

1 个答案:

答案 0 :(得分:2)

我希望我能正确理解你。

  1. 获取所有已定义的变量:get_defined_vars()

  2. 按类型过滤对象:is_object()


  3. → 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"!';
    }
    

    您还可以使用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";
        }
    }