如何检查symfony2中是否有某个类的实例

时间:2012-07-27 05:47:58

标签: php

如果实体是少数类但不是某些类的成员,我想执行一些函数。

有一个名为instanceof的函数。

但有什么像

if ($entity !instanceof [User,Order,Product])

6 个答案:

答案 0 :(得分:116)

给他们一个共同的界面然后

if (!$entity instanceof ShopEntity)

或留在

if (!$entity instanceof User && !$entity instanceof Product && !$entity instanceof Order)

我会避免创建任意函数只是为了在一个地方保存一些字符。另一方面,如果你“经常”需要它,你可能有一个设计缺陷? (在“太多边缘案例”等含义中)

答案 1 :(得分:55)

PHP手册说:http://php.net/manual/en/language.operators.type.php

!($a instanceof stdClass)

这只是一种逻辑和“语法”正确的书面语法。

!$class instanceof someClass

上面建议的语法很棘手,因为我们没有具体说明否定的范围:变量本身或$class instanceof someclass的整个结构。我们只需依靠运营商的优先权[编辑,感谢@Kolyunya]。

答案 2 :(得分:11)

PHP Operator Precedence

instanceof运算符就在否定之前,然后是这个表达式:

!$class instanceof someClass

在PHP中是正确的,这是您所期望的。

答案 3 :(得分:1)

此功能应该这样做:

function isInstanceOf($object, Array $classnames) {
    foreach($classnames as $classname) {
        if($object instanceof $classname){
            return true;
        }
    }
    return false;
}

所以你的代码是

if (!isInstanceOf($entity, array('User','Order','Product')));

答案 4 :(得分:1)

function check($object) {
    $deciedClasses = [
        'UserNameSpace\User',
        'OrderNameSpace\Order',
        'ProductNameSpace\Product',
    ];

    return (!in_array(get_class($object), $allowedClasses));
}

答案 5 :(得分:0)

或者您可以尝试这些

    $cls = [GlobalNameSpace::class,\GlobalNameSpaceWithSlash::class,\Non\Global\Namespace::class];
    if(!in_array(get_class($instance), $cls)){
        //do anything
    }