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


How to check if not instance of some class in symfony2

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

有一个函数叫做instanceof

但是有类似的东西吗

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

给他们一个通用接口,然后

if (!$entity instanceof ShopEntity)

或留在

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

我会避免仅仅为了在一个地方保存一些字符而创建任意函数。另一方面,如果你"经常"需要它,你可能有设计缺陷?(在"太多边缘情况"或类似情况的含义中)

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

!($a instanceof stdClass)

这只是一个合乎逻辑和"语法"正确的书面语法。

!$class instanceof someClass

然而,上面建议的语法很棘手,因为我们没有指定否定的确切范围:变量本身还是$class instanceof someclass的整个结构。我们只需要依赖这里的操作员先验[编辑,感谢@Kolyunya]。

PHP运算符优先级

instanceof运算符刚好在否定之前,则此表达式为:

!$class instanceof someClass

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

这个函数应该做到:

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

所以你的代码是

if (!isInstanceOf($entity, array('User','Order','Product')));
function check($object) {
    $deciedClasses = [
        'UserNameSpace'User',
        'OrderNameSpace'Order',
        'ProductNameSpace'Product',
    ];
    return (!in_array(get_class($object), $allowedClasses));
}

或者你可以试试这些

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