Wenn null, verwenden Sie eine andere Variable in einer Zeile in PHP

Lesezeit: 5 Minuten

Benutzer-Avatar
Rochel

Gibt es in PHP etwas Ähnliches wie JavaScript:

alert(test || 'Hello');

Wenn test also undefiniert oder null ist, sehen wir Hello, andernfalls sehen wir den Wert von test.

Ich habe eine ähnliche Syntax in PHP ausprobiert, aber es scheint nicht richtig zu funktionieren … Außerdem habe ich keine Ahnung, wie ich dieses Problem googeln soll.

Danke

Bearbeiten

Ich sollte wahrscheinlich hinzufügen, dass ich es in einem Array verwenden wollte:

$arr = array($one || 'one?', $two || 'two?'); //This is wrong

Aber in der Tat kann ich das Inline-‘? :’ if-Anweisung auch hier, danke.

$arr = array(is_null($one) ? "one?" : $one, is_null($two) ? "two ?" : $two); //OK

  • Wenn Sie ein Array mit mehr als 3 Elementen wie diesem erstellen möchten, schauen Sie sich meine Antwort an, um sich viele ternäre Operatoren zu sparen;)

    – Felix Klinge

    14. Februar 2011 um 23:03 Uhr

  • Nun, ja, offensichtlich würde ich es in eine Art Hilfsfunktion stecken;) danke

    – Rochel

    14. Februar 2011 um 23:05 Uhr

Benutzer-Avatar
Yamiko

Ab PHP 7 können Sie etwas namens a verwenden Koaleszenz-Operator das macht genau das was du willst ohne das E_NOTICE das ?: löst aus.

Um es zu verwenden, verwenden Sie ?? die prüft, ob der Wert auf der linken Seite gesetzt und nicht null ist.

$arr = array($one ?? 'one?', $two ?? 'two?'); 

Benutzer-Avatar
Yamiko

du kannst tun echo $test ?: 'hello';

Das wird widerhallen $test wenn es stimmt und 'hello' Andernfalls.

Notiz es wird eine Benachrichtigung oder einen strengen Fehler auslösen, wenn $test ist nicht eingestellt aber…

Dies sollte kein Problem darstellen, da die meisten Server so eingestellt sind, dass sie diese Fehler ignorieren. Die meisten Frameworks haben Code, der diese Fehler auslöst.


Bearbeiten: Dies ist ein Klassiker Ternärer Operator, aber ohne Mittelteil. Verfügbar seit PHP 5.3.

echo $test ? $test : 'hello'; // this is the same
echo $test ?: 'hello';        // as this one

Dies prüft nur, ob die erste Variable wahr ist und nicht, wenn sie nicht definiert ist, und löst in diesem Fall die aus E_NOTICE Error. Für letzteres lesen Sie die PHP7-Antwort unten (hoffentlich bald oben).

  • Ich stimme zu, aber wichtige Bibliotheken und Plugins für sie lösen sie ständig aus, sodass sie normalerweise in der Produktion ignoriert werden. Auch diese Art von Fehler ist E_NOTICE, was sicher ignoriert werden kann. Ich persönlich mag es nicht, irgendwelche Fehler auszulösen, einschließlich E_NOTICE, aber bei dieser Art von Fehler geht es mehr um Best Practices als um einen tatsächlichen Fehler, der behoben werden muss

    – Yamiko

    23. März 2015 um 18:14 Uhr

  • Ich weiß auch, dass vorzeitige Optimierung schlecht ist und alles andere als das Auslösen einer Benachrichtigung dazu führt, dass die Fehlerbehandlungsfunktion (ob die Standard- oder eine benutzerdefinierte PHP-Funktion) aufgerufen wird, selbst wenn diese Funktion den Fehler aufgrund Ihrer error_reporting-Einstellung ignoriert, und das kann langsam sein vor allem, wenn Sie es innerhalb einer Schleife tun.

    – Thomas Rutter

    6. März 2017 um 4:06 Uhr


  • Wie heißt dieser ?: Operator? Kann jemand die Dokumente verlinken?

    – inafalcao

    6. April 2019 um 6:10 Uhr

  • @inafalcao Es ist klassisch ternärer Operator, aber ohne Mittelteil. Es macht es also zu einem verkürzten ternären Operator. Verfügbar seit PHP 5.3.

    – Djboris

    16. Juli 2019 um 8:43 Uhr

  • Nett, davon wusste ich noch nichts. Du könntest sagen ?: ist zu ? wie += ist zu =… irgendwie.

    – Agent Freitag

    7. Februar 2020 um 20:01 Uhr


Benutzer-Avatar
Jeff Busby

Siehe die Antwort von @Yamiko unten für eine PHP7-Lösung https://stackoverflow.com/a/29217577/140413

 echo (!$test) ? 'hello' : $test;

Oder Sie können etwas robuster sein und dies tun

echo isset($test) ? $test : 'hello'; 

  • Warum gegen !$test prüfen und nicht einfach $test durchführen? $test : ‘Hallo’; stattdessen?

    – AndrewKS

    14. Februar 2011 um 22:55 Uhr

  • Nun, er sagte, wenn $test undefiniert oder null wäre, wollte er ‘Hallo’ sehen, wenn der Wert von $test int(0) wäre, würde er immer noch hallo sehen, obwohl es gesetzt und nicht null ist, weil PHP 0 als falsch interpretiert, es sei denn, Sie verwenden ===. Nur um sicherzugehen, sollte er überprüfen, ob $test gesetzt und nicht null ist. Das war zumindest meine Logik.

    – Jeff Busby

    14. Februar 2011 um 23:01 Uhr

  • Ich verstehe, aber Ihre Auflösung ist sehr verwirrend 🙁 . Es sollte keine akzeptierte Antwort gemäß “If null use other variable in one line in PHP” sein. Die Antwort von @yamiko ist sowohl sehr einfach als auch nützlich

    – Santi

    12. Oktober 2017 um 13:36 Uhr

  • Das || is_null() ist hier überflüssig, isset($var) gibt false zurück, wenn $var ist Null

    – Arth

    23. Februar 2018 um 15:42 Uhr

Verwenden Sie dies gemäß der neuesten Version für die Kurzschrift

$var = $value ?? "secondvalue";

Benutzer-Avatar
TrophyGeek

Einzeiler. Super lesbar, funktioniert für reguläre Variablen, Arrays und Objekte.

// standard variable string
$result = @$var_str ?: "default";

// missing array element
$result = @$var_arr["missing"] ?: "default";

// missing object member
$result = @$var_obj->missing ?: "default";

Sehen Sie es in Aktion: PHP-Sandbox-Demo

Ich bin sehr überrascht, dass dies in den anderen Antworten nicht vorgeschlagen wird:

echo isset($test) ? $test : 'hello';

Aus den Dokumenten isset($var) wird zurückkehren FALSCH wenn $var existiert nicht oder auf null gesetzt ist.

Der Null-Coalesce-Operator ab PHP 7, beschrieben von @Yamiko, ist eine Syntax-Abkürzung für das Obige.

In diesem Fall:

echo $test ?? 'hello'; 

Wenn Sie auf diese Weise ein Array erstellen möchten, array_map bietet eine kürzere Möglichkeit, dies zu tun (abhängig von der Anzahl der Elemente im Array):

function defined_map($value, $default) {
    return (!isset($value) || is_null($value)) ? $default : $value;
    // or return $value ? $default : $value;
}

$values = array($one, $two);
$defaults = array('one', 'two');

$values = array_map('defined_map', $values, $defaults);

Stellen Sie einfach sicher, dass Sie es wissen welche Elemente ausgewertet werden false damit Sie den richtigen Test anwenden können.

1352230cookie-checkWenn null, verwenden Sie eine andere Variable in einer Zeile in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy