Я хочу выполнить некоторые функции, если сущность принадлежит нескольким классам, но не некоторым.
Существует функция, называемая instanceof
.
Но есть ли что-то вроде
if ($entity !instanceof [User,Order,Product])
Я хочу выполнить некоторые функции, если сущность принадлежит нескольким классам, но не некоторым.
Существует функция, называемая 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)
Это просто логичный и "грамматически" правильный письменный синтаксис.
Однако предложенный синтаксис сложный, потому что мы не указываем, какова именно область действия отрицания: сама переменная или вся конструкция "$ var instanceof someclass". Мы должны будем только полагаться здесь на точность оператора [Отредактировано, благодаря @Kolyunya].
!$class instanceof someClass
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));
}