2015-03-31 4 views
9

Können Sie den Ternary Operator in PHP ohne die abschließende "else" -Anweisung verwenden? Ich habe es versucht und es gibt Fehler zurück. Google-Suche ergibt nichts, also denke ich, dass die Antwort wahrscheinlich nein ist. Ich wollte das hier nur überprüfen. Zum Beispiel:Verwenden von Ternary Operator ohne Else-Anweisung PHP

Wird nur $ new_variable setzen, wenn $ test existiert. Jetzt kann ich

$new_variable = (isset($testing) ? $testing : ""); 

aber das gibt eine leere Variable für $ new_variable wenn $ Tests nicht festgelegt ist. Ich möchte keine leere Variable, wenn sie nicht gesetzt ist. Ich möchte, dass die $ new_variable nicht erstellt wird.

Ich versuchte

$new_variable = (isset($testing) ? $testing); 

und es zurück Fehler. Ich versuchte auch

$new_variable = (isset($testing) ? $testing :); 

und es gab auch Fehler zurück. Gibt es eine Möglichkeit, den Ternary Operator ohne die angehängte else-Anweisung zu verwenden, oder bin ich dabei, es aus der Hand zu schreiben?

BEARBEITEN: Nach dem Rat von Rizier123 habe ich versucht, den 'else' Teil der Gleichung auf NULL zu setzen, aber es fügt immer noch einen Schlüssel zu einem Array hinzu. Der Wert ist nicht da, aber der Schlüssel ist, was meine Pläne durcheinander bringt. Bitte erlauben Sie mir, weiter zu erklären.

Der Code wird eine Reihe von $ _POST-Variablen aus einem Formular nehmen und sie für Parameter in einer stdClass verwenden, die dann für API-Methodenaufrufe verwendet wird. Einige der Formularvariablen sind nicht vorhanden, da sie alle auf die gleiche Variable für den API-Aufruf angewendet werden, der Benutzer jedoch nur einen auswählen kann. Als ein Beispiel, vielleicht können Sie 3 Elemente auswählen, welches Objekt Sie auch an die stdClass übergeben und die anderen 2 nicht existieren.

ich das versucht:

$yes_this_test = "IDK"; 
$setforsure = "for sure"; 
$list = new stdClass; 
$list->DefinitelySet = $setforsure; 
$list->MaybeSet = (isset($yes_this_test) ? $yes_this_test : NULL); 
$list->MaybeSet = (isset($testing) ? $testing : NULL); 
print_r($list); 

Aber offensichtlich wird MaybeSet auf NULL gesetzt, weil (isset (testing $) kommt nach (isset ($ yes_this_test) und es gibt

stdClass Object ([DefinitelySet] => for sure [MaybeSet] =>) 

ich gewonnen‘ Ich weiß nicht, in welcher Reihenfolge die $ _POST-Variablen kommen, also kann ich sie nicht so strukturieren, dass die Liste in der richtigen Reihenfolge verarbeitet wird.

Jetzt weiß ich, dass ich etwas tun kann

Aber ich hatte gehofft, dass es eine Kurzschrift für diese Art von Logik gibt, wie ich Dutzende von diesen schreiben muss. Gibt es einen Operator, der dem Ternary Operator ähnelt, der für if/elsif-Anweisungen verwendet wird?

+1

Eine andere Option ist die if-Anweisung ohne die geschweiften Klammern. Es könnte auf einer Linie ähnlich einer ternären auch sein. 'if (isset ($ testing)) $ new_variable = $ testing;'. IMO Ich mag es nicht, wenn ich ohne geschweifte Klammern sage, dass es möglich ist. IMO wäre es besser, es einfach auf NULL zu setzen, wie es Rizier andeutet, denn isset wird false zurückgeben, wenn der Wert NULL ist. 'isset ($ nullVar)' gibt false zurück. –

+0

Mögliches Duplikat von [Ternary Operators. Möglich für eine einseitige Aktion?] (Http://stackoverflow.com/questions/14520949/ternary-operators-possible-for-a-onesided-action) –

Antwort

4

einfach es NULL wie folgt festgelegt:

$new_variable = (isset($testing) ? $testing : NULL); 

Die Sie Variable mit einem isset() Scheck falsch zurückkehren würde.

Sie können mehr über NULL in der Bedienungsanleitung lesen.

Und ein Zitat von dort:

Der besondere NULL-Wert repräsentiert eine Variable ohne Wert. NULL ist der einzig mögliche Wert vom Typ null.

Eine Variable wird als null, wenn:

  • hat die Konstante NULL zugewiesen.
  • wurde noch nicht auf einen Wert eingestellt.
  • wurde es nicht gesetzt().
+0

Perfekt! Vielen Dank. Ich nahm immer an, dass NULL so ziemlich leer war. Ich denke, ich sollte weniger annehmen und mehr lesen. ;) – Longblog

+0

@Longblog Gern geschehen! Einen schönen Tag noch: D – Rizier123

+1

Bah, tatsächlich, nachdem es gerade jetzt getestet wurde, hängt es die Variable immer noch an eine Liste an, genau wie eine leere Variable. Ich weiß nicht, ob das funktionieren wird, weil ich es für ein Array von Parametern verwenden muss, die $ _POST-Variablen als Parameter verwenden. Ich weiß nicht, in welcher Reihenfolge die $ _POST-Variablen durchkommen werden, also könnte ich am Ende mit einem NULL-Parameter enden, obwohl eine der $ _POST-Variablen gesetzt ist. Ich werde weiter oben erklären. – Longblog

10

Since PHP 5.3 Sie können dies tun:

!isset($testing) ?: $new_variable = $testing;

Wie Sie sehen können, es wird nur der Teil, wenn die Bedingung falsch ist, so dass Sie den isset Ausdruck zu negieren haben.