Ich möchte einige Funktionen ausführen, wenn die Entität Mitglied einiger Klassen ist, aber nicht einiger.
Es gibt eine Funktion namens instanceof.
Aber gibt es so etwas
if ($entity !instanceof [User,Order,Product])
Ich möchte einige Funktionen ausführen, wenn die Entität Mitglied einiger Klassen ist, aber nicht einiger.
Es gibt eine Funktion namens instanceof.
Aber gibt es so etwas
if ($entity !instanceof [User,Order,Product])
Antworten:
Geben Sie ihnen eine gemeinsame Schnittstelle und dann
if (!$entity instanceof ShopEntity)
oder bleib bei
if (!$entity instanceof User && !$entity instanceof Product && !$entity instanceof Order)
Ich würde es vermeiden, beliebige Funktionen zu erstellen, nur um einige Zeichen an einem einzigen Ort zu speichern. Auf der anderen Seite, wenn Sie es "zu oft" brauchen, haben Sie möglicherweise einen Designfehler? (Im Sinne von "zu viel Randfälle" oder so)
if (!($entity instanceof User))?
$a+$b+$cvs ($a+$b)+$c. Schon mal versucht 2**3**4 == (2**3)**4? ;)
if ( $entity instanceof Audio )ich muss haben use App\Entity\Audio;. PHP wird keinen Fehler auslösen, wenn Sie keine Klasse verwenden, die Sie überprüfen - aber Ihr If wird niemals ausgelöst.
Das PHP-Handbuch lautet: http://php.net/manual/en/language.operators.type.php
!($a instanceof stdClass)
Dies ist nur eine logische und "grammatisch" korrekte geschriebene Syntax.
!$class instanceof someClass
Die oben vorgeschlagene Syntax ist jedoch schwierig, da wir nicht genau angeben, in welchem Umfang die Negation ausgeführt wird: die Variable selbst oder das gesamte Konstrukt von $class instanceof someclass. Wir müssen uns hier nur auf die Präzision des Betreibers verlassen [Bearbeitet dank @Kolyunya].
if (!$entity instanceof ShopEntity)nicht intuitiv ist ... Viele von uns verwenden sie !$entityals $entity === null.
We will only have to rely here on the smart implementation of the PHP parser.? Es gibt die Sprachspezifikation, die eindeutig besagt, dass der instanceofOperator eine höhere Priorität als der !Operator hat.
instanceof Operator ist kurz vor der Negation dann dieser Ausdruck:
!$class instanceof someClass
ist genau richtig in PHP und das tun Sie, was Sie erwarten.
instanceofOperators höher ist als !, sodass die Aussage ein echtes Ergebnis liefert. Vielen Dank
Diese Funktion sollte es tun:
function isInstanceOf($object, Array $classnames) {
foreach($classnames as $classname) {
if($object instanceof $classname){
return true;
}
}
return false;
}
Ihr Code ist also
if (!isInstanceOf($entity, array('User','Order','Product')));