Für einen polymorphen Schalter mit instanceof die Erbschaft berücksichtigt:
switch(true) {
case $objectToTest instanceof TreeRequest:
echo "tree request";
break;
case $objectToTest instanceof GroundRequest:
echo "ground request";
break;
}
Für einen Schalter, bei dem der Klassenname genau übereinstimmen sollte:
$class = get_class($objectToTest);
switch($class) {
case 'TreeRequest':
echo "tree request";
break;
case 'GroundRequest':
echo "ground request";
break;
}
dieser Schalter(wahr), :+1:
– Koponk
6. Dezember 2016 um 1:58 Uhr
Eine Warnung an alle, die das erste Beispiel verwenden: Es ist nicht dasselbe wie instanceof da es Klassenvererbung und -implementierungen ignoriert.
– SEoF
29. Dezember 2016 um 12:52 Uhr
Sicher, es ist möglich. Aber warum Oh warum willst du das überhaupt machen? Es ist nichts falsch mit if( .. instanceof ...), elseif(... instanceof ...). Nicht nur das erste Beispiel ist falsch, sondern das zweite nimmt auch viel mehr Platz ein, verschlechtert die Lesbarkeit und Effizienz (da es das Kompilieren der “Fall”-Anweisungen verhindert, da sie dynamisch sind. Tun Sie so etwas nicht.
– Patrick Allaert
5. Dezember 2017 um 11:47 Uhr
Folgendes ist richtiger:
$class = get_class($objectToTest);
switch($class) {
case TreeRequest::class:
echo "tree request";
break;
case GroundRequest::class:
echo "ground request";
break;
}
Auf diese Weise werden Namespaces richtig verglichen (Sie müssen sie nicht eingeben) und wenn sich etwas ändert, wie z. B. der Namespace oder der Klassenname, erhalten Sie einen anständigen IDE-Fehler, der Sie darüber informiert, dass Ihr Code beschädigt ist.
Denken Sie daran, dass Sie auf diese Weise Unterklassen verpassen (Klassenvererbung und Implementierungen)
– Igor Scabini
27. Februar 2018 um 12:00 Uhr
um sicherzustellen, dass diese Lösung funktioniert, auch wenn $objectToTest ist ein Proxy, den Sie verwenden können $class = ClassUtils::getClass($objectToTest);
– Roubi
13. Februar 2019 um 18:57 Uhr
@Roubi genau das, wonach ich gesucht habe (Symfony/Doctrine)
– Adam Ducho
29. Juni um 13:09 Uhr
12834300cookie-checkUmschalten nach Klasse (instanceof) in PHPyes