webentwicklung-frage-antwort-db.com.de

Verwenden des ternären Operators ohne die Else-Anweisung PHP

Können Sie den ternären Operator in PHP ohne die schließende "else" -Anweisung verwenden? Ich habe es ausprobiert und es werden Fehler ausgegeben. Die Google-Suche gibt nichts nach. Ich denke, die Antwort ist wahrscheinlich nein. Ich wollte nur hier nachsehen. Zum Beispiel:

if ( isset($testing) {
  $new_variable = $testing;
}

Wird $ new_variable nur setzen, wenn $ testing vorhanden ist. Jetzt kann ich machen 

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

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

Ich habe es versucht

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

und es gab Fehler zurück. Ich habe es auch versucht

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

und es gab auch Fehler zurück. Gibt es eine Möglichkeit, den ternären Operator ohne die beigefügte else-Anweisung zu verwenden, oder stecke ich fest, dass er die Langhabe schreibt?

BEARBEITEN: Nach dem Rat von Rizier123 habe ich versucht, den "else" -Teil der Gleichung auf NULL zu setzen, aber es hängt immer noch einen Schlüssel an ein Array an. Der Wert ist nicht da, aber der Schlüssel ist, was meine Pläne durcheinander bringt. Erlauben Sie mir bitte weiter zu erklären.

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

Ich habe 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 natürlich wird die Einstellung PossibleSet auf NULL gesetzt, da (isset ($ testing) nach (isset ($ yes_this_test) kommt und zurückgegeben wird

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

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

Jetzt weiß ich, dass ich sowas machen kann

if ( isset($yes_this_test ) {
  $list->MaybeSet = $yes_this_test;
}
elseif ( isset($testing) ) {
  $list->MaybeSet = $testing;
}

Aber ich hatte gehofft, dass es eine Abkürzung für diese Art von Logik gibt, da ich Dutzende davon schreiben muss. Gibt es einen Operator, der dem Ternary Operator ähnelt, der für if/elseif-Anweisungen verwendet wird?

17
Longblog

Seit PHP 5.3 können Sie Folgendes tun:

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

Wie Sie sehen, wird der Teil nur dann verwendet, wenn die Bedingung false ist. Daher müssen Sie den Ausdruck isset negieren.

UPDATE

Seit PHP 7.0 können Sie Folgendes tun:

$new_variable = $testing ?? '';

Wie Sie sehen, gibt es den ersten Operanden zurück, wenn er existiert und nicht NULL ist. Andernfalls wird der zweite Operand zurückgegeben.

19
Daan

Setzen Sie es einfach wie folgt auf NULL:

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

Die Variable "you" würde bei einer isset()-Prüfung "false" zurückgeben.

Weitere Informationen zu NULL finden Sie im Handbuch.

Und ein Zitat von dort:

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

Eine Variable gilt als null wenn:

  • es wurde die Konstante NULL zugewiesen.
  • es wurde noch nicht auf einen Wert gesetzt .
  • es wurde unset () gesetzt.
7
Rizier123

Sie können dies auch tun (Kurzform):

isset($testing) ? $new_variable = $testing : NULL;
0
Arnaud Anato