mich nicht zu viel zu versuchen, kümmern würde drei Zeilen Code zu verkürzen, die in aller Ehrlichkeit in einer Zeile sowieso geschrieben werden könnte:
if ($obj->method()) $data['key'] = 'value' ;
jedoch als @Mischa's answer gezeigt, gibt es kürzere Wege. Sie könnten den logischen Operator &&
verwenden Zuordnung auszuführen, wie gut:
$obj->method() && $data['key'] = 'value' ;
Bei diesem Verfahren wird der Ausdruck auf der rechten Seite ausgewertet wird, wenn der Ausdruck auf der linken Seite ist „true“.
Eine andere Methode ist der neue kürzere ternäre Operator, der den zweiten Ausdruck ausschließt. Während Sie die Langform ternären als Alternative in Ihrer ursprünglichen Frage präsentiert, können Sie auch das neue Format seit PHP 5,3
!$obj->method() ?: $data['key'] = 'value' ;
bereitgestellt betrachten Da wir nicht den zweiten Ausdruck verwenden, kehren wir unser Test in der erster Ausdruck. Wir suchen nicht mehr nach einem positiven, sondern nach einem negativen. Wenn das Negativ gefunden wird, findet unsere Aufgabe statt.
Ich biete diese Antwort nicht an, um Sie zu ermutigen, 3-Linien-Lösungen zu vermeiden, aber nur um Sie zu ermutigen, von Zeit zu Zeit kürzere Lösungen zu erkunden, da sie oft zu Teilen der Sprache führen, die Sie nicht mögen habe es sonst entdeckt.
Wenn '$ method-> isAbstract()' false ist, wird der Array-Schlüssel 'abstract' definiert. Ich möchte nicht, dass das Element im Array existiert, wenn es falsch ist. – Justin
Ternärer Operator ** IST NICHT ** eine Kurzschrift zu 'if-else'. Fragte, wer es so gesagt hat, dass so viele Leute so denken ?! – zerkms
Was ist los mit dem ersten Code? Arent 3 Zeilen kurz genug? Sie können es kürzer schreiben wie 'if ($ method-> isAbstract()) $ details ['abstract'] = true;'. Interessanter: Warum sollte der Schlüssel komplett fehlen? Warum nicht "falsch"? Fühlt sich konsistenter an und es ist nur ein völlig offensichtliches '$ details ['abstract'] = $ method-> isAbstract()' – KingCrunch