Подтвердить что ты не робот

Как проверить, не является ли экземпляр какого-либо класса в symfony2

Я хочу выполнить некоторые функции, если сущность принадлежит нескольким классам, но не некоторым.

Существует функция, называемая instanceof.

Но есть ли что-то вроде

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

Ответ 1

Дайте им общий интерфейс, а затем

if (!$entity instanceof ShopEntity)

или остаться с

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

Я бы избегал создания произвольных функций, чтобы сохранить некоторые символы в одном месте. С другой стороны, если вам это нужно "слишком часто", у вас может быть недостаток дизайна? (В смысле "слишком много случаев краев" или таких)

Ответ 2

В руководстве по PHP написано: http://php.net/manual/en/language.operators.type.php

!($a instanceof stdClass)

Это просто логичный и "грамматически" правильный письменный синтаксис.

Однако предложенный синтаксис сложный, потому что мы не указываем, какова именно область действия отрицания: сама переменная или вся конструкция "$ var instanceof someclass". Мы должны будем только полагаться здесь на точность оператора [Отредактировано, благодаря @Kolyunya].

!$class instanceof someClass

Ответ 3

Приоритет операторов PHP

Оператор

instanceof непосредственно перед отрицанием, то это выражение:

!$class instanceof someClass

является правильным в PHP, и это делает то, что вы ожидаете.

Ответ 4

Эта функция должна сделать это:

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

Итак, ваш код

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

Ответ 5

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

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