Я хочу виконати деякі функції, якщо сутність є членом кількох класів, але не деяких.
Існує функція, яка називається 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)
Я б уникав створення довільних функцій лише для того, щоб зберегти деякі символи в одному місці. З іншого боку, якщо вам це потрібно "занадто часто", можливо, у вас є недолік дизайну? (У значенні "занадто багато крайових випадків" або подібних)
if (!($entity instanceof User))?
$a+$b+$cпроти ($a+$b)+$c. Ви коли-небудь пробували 2**3**4 == (2**3)**4? ;)
if ( $entity instanceof Audio )мені потрібно мати use App\Entity\Audio;. PHP не видасть помилки, якщо ви не використовуєте клас, який перевіряєте, але ваш if ніколи не запускатиметься.
У посібнику PHP сказано: http://php.net/manual/en/language.operators.type.php
!($a instanceof stdClass)
Це лише логічний та «граматично» правильний письмовий синтаксис.
!$class instanceof someClass
Запропонований синтаксис вище, однак, хитрий, оскільки ми не вказуємо, яка саме сфера заперечення: сама змінна або вся конструкція $class instanceof someclass. Нам доведеться покладатися лише на перевагу оператора тут [Відредаговано завдяки @Kolyunya].
if (!$entity instanceof ShopEntity)це не інтуїтивно ... Багато з нас використовують !$entityяк $entity === null.
We will only have to rely here on the smart implementation of the PHP parser.? Існує специфікація мови, в якій чітко зазначено, що instanceofоператор має вищий пріоритет, ніж !оператор.
instanceof оператор знаходиться безпосередньо перед запереченням, тоді цей вираз:
!$class instanceof someClass
в PHP в самий раз, і це все, що ви очікуєте.
instanceofоператора вищий ніж !, тому твердження дає справжній результат. Спасибі
Ця функція повинна це робити:
function isInstanceOf($object, Array $classnames) {
foreach($classnames as $classname) {
if($object instanceof $classname){
return true;
}
}
return false;
}
Отже, ваш код
if (!isInstanceOf($entity, array('User','Order','Product')));