2016-03-30 14 views
0

Ich versuche, diesen Zustand zu replizieren:Kann nicht Bedingung mit ternären Operator replizieren

$sth = $this->getResult(); 
if($sth !== true){ 
    return $sth; 
} 

mit ternären Operator ich versucht;

($sth !== true) ? return $sth : ($sth == true) ? null; 

Aber ich habe:

Erwartete Kolon

+1

Und warum versuchen Sie es zu ersetzen? Sieht das Original nicht besser für Sie aus? – mario

+0

Ich möchte nur lernen, wie dies mit ternary zu tun, aber ja die erste ist lesbarer – Sandokan

+0

Was passiert, wenn '$ sth' ist wahr? Falsch zurückgeben? – frankle

Antwort

3

Was Sie letztendlich erreichen wollen, ist mit einem ternären Operator nicht möglich.

Was Sie versuchen, ist NUR in 1 Situation zurückzukehren, und den Code in der anderen fortzusetzen. Die einzige Möglichkeit, dies mit einem ternären Operator tun können, ist wie folgt:

$result = ($sth !== true) ? true : false; 
if ($result) return; 

Aber das irgendwie Niederlagen der Zweck des ternären Operator.


In der Tat hat Ihren Code ein paar Probleme:

  • Ternary Bediener muss immer 3 Teile (*)
  • Es gibt keine Notwendigkeit, eine Bedingung zweimal zu überprüfen, wie die gesamte ist Punkt des Bedieners
  • Der Operator gibt einen Wert zurück, so dass Sie keinen return innerhalb des truthy oder falsy Teils setzen können.

Ternäre Operator benötigt 3 Teile

(condition) ? truthy result : falsy result 

Hinweis: Seit PHP 5.3 ist es möglich, den mittleren Teil des ternären Operator auszulassen. Expression expr1?: Expr3 gibt expr1 zurück, wenn expr1 TRUE ergibt, andernfalls expr3. - Quelle: php.net

Keine Notwendigkeit, Dinge zu überprüfen doppelt:

Auch hier wollen wir unsere Betreiber nehmen:

($sth !== true) 
       ? "I return if '$sth' is not true" 
       : "I return if '$sth' is true"; 

Es gibt keine Notwendigkeit, eine zweite Kontrolle zu haben. Sie haben beide Situationen bereits abgedeckt. :)

Keine Rückgabewerte innerhalb des truthy oder falsy Teil

Schließlich: Es ist ein Operator, der einen Wert zurückgibt.Sie können keine return im truthy oder falsy Teil setzen, müssen Sie es vor ihm setzen:

return ($sth !== true) 
       ? "I return if '$sth' is not true" 
       : "I return if '$sth' is true"; 
+0

Ich glaube nicht, dass es 3 Teile braucht, können Sie das 'truthy Ergebnis' – frankle

+0

verpassen und auch den gleichen Fehler bekommen – Sandokan

+0

@Sandokan korrigiert meine Antwort. :) – Jordumus

0

Sie haben zwei s in Ihrem Code, und nur ein '?' ':'. Ich glaube, das ist die Sache. Sie müssen die gleiche Anzahl an Fragezeichen haben wie Sie Doppelpunkte haben.

0

Wenn Sie es verwenden aus einer Funktion zurückkehren würde ich es tun, wie so:

function testFunc() 
{ 
    //arbitrary setting of $sth only to explain the point 
    $sth = false; 

    //condition ? true : false 
    $outcome = ($sth === true) ? true : false; 

    return $outcome; 
} 

// false 
var_dump(testFunc()); 

Merken, (Zustand)? value wenn true: value wenn false;

Sie können auch den [Wert, wenn true] verpassen Parameter, etwa so:

$outcome = ($sth === true) ?: false; 

Dieser Ausdruck den Wert von $sth-$outcome zuordnen würde, wenn $sth zutraf.

+0

Ist nicht mein Beispiel, dafür verstehe ich nicht, wie ich das Problem beheben kann – Sandokan

0

Ihr Ersetzungscode verfehlt tatsächlich einen Doppelpunkt ganz am Ende. Es ist syntaktisch falsch. Bei $sth !== true geben Sie $sth zurück. Wenn nicht, starten Sie eine neue ternäre Aussage (die nicht vollständig ist), die ich nicht richtig ergründen kann. Es sieht jetzt nicht wie die ursprüngliche Aussage aus.

+1

Nun, Sie benutzen einen Operator, den ich noch nie zuvor gesehen habe. – Daan

+0

'! ===' sollte '! ==' oder nicht sein? – Sandokan

+0

Sie haben Recht. Bearbeitet. – Dandorid

0

Der ternäre Operator ist nett und nützlich, aber es ist kein Befehlsblock. Es ist eine Entscheidung über einen Wert. Als Faustregel gilt, wenn man etwas als Wert einer Variablen zuweisen können Sie es innerhalb des ternären Operator verwenden:

$var = 3;   // valid 
($condition?3:0); // valid 

$var = return 3; //Invalid 
($condition?return 3:null) //Invalid 

Sie müssen:

return ($sth !== true?$sth:null); 
Verwandte Themen