Viele Programmiersprachen haben eine coalesce Funktion (kehrt der erste Nicht-NULL - Wert, beispielsweise ). PHP im Jahr 2009 leider nicht.
Was wäre ein guter Weg, um eine in PHP zu implementieren, bis PHP selbst eine Koaleszenzfunktion erhält?
Viele Programmiersprachen haben eine coalesce Funktion (kehrt der erste Nicht-NULL - Wert, beispielsweise ). PHP im Jahr 2009 leider nicht.
Was wäre ein guter Weg, um eine in PHP zu implementieren, bis PHP selbst eine Koaleszenzfunktion erhält?
??
für PHP 7.Antworten:
Es gibt einen neuen Operator in PHP 5.3, der dies tut:
?:
Quelle: http://www.php.net/ChangeLog-5.php#5.3.0
quelle
$input['properties']['range_low'] ?: '?'
array() ?: null ?: false
zurückfalse
. Der Bediener ist in der Tat gesund.PHP 7 führte einen echten Koaleszenzoperator ein :
Wenn der Wert vor dem
??
nicht existiert odernull
der Wert nach dem??
ist.Die Verbesserung gegenüber dem genannten
?:
Operator besteht darin, dass der??
auch undefinierte Variablen behandelt, ohne eine zu werfenE_NOTICE
.quelle
($_GET['doesNotExist'] ?? null) ?: 'fallback'
?:
over??
ist jedoch, dass auch leere Werte zusammengeführt werden, was??
nicht der Fall ist. Ähnlich wie das Verhalten des logischen ODER-Operators in JavaScript (dh$val || 'default'
) würde?:
ich eine praktischere Form der Verschmelzung finden, wenn wir in unserer Praxis letztendlich feststellen, dass wir sowohl leer als auch null auf die gleiche Weise behandeln (dh$val ?: 'default'
). Und wenn Sie das Problem weiter forcieren und schlucken möchtenE_NOTICE
, können Sie dies sogar argumentieren:echo @$val ?: 'default';
Erster Treffer für "PHP Coalesce" bei Google.
http://drupial.com/content/php-coalesce
quelle
Ich mag den ?: Operator wirklich. Leider ist es in meiner Produktionsumgebung noch nicht implementiert. Also benutze ich das Äquivalent dazu:
quelle
coalesce
soll das erste Nicht-Null- Argument zurückgeben, auf das es stößt, einschließlichFALSE
. Diese Funktion wird jedoch verworfenFALSE
, wahrscheinlich nicht das, was op im Sinn hat (zumindest nicht das, was ich von einercoalesce
Funktion erwarten würde ).Es ist erwähnenswert, dass aufgrund der Behandlung nicht initialisierter Variablen und Array-Indizes durch PHP jede Art von Koaleszenzfunktion von begrenztem Nutzen ist. Ich würde gerne dazu in der Lage sein:
In den meisten Fällen führt dies jedoch zu einem PHP-Fehler mit einem E_NOTICE. Der einzig sichere Weg, die Existenz einer Variablen vor ihrer Verwendung zu testen, besteht darin, sie direkt in empty () oder isset () zu verwenden. Der von Kevin vorgeschlagene ternäre Operator ist die beste Option, wenn Sie wissen, dass alle Optionen in Ihrer Koaleszenz als initialisiert bekannt sind.
quelle
$getstuff = $_GET+$_SESSION+array('id'=>null);$id=$getstuff['id'];
).??
, um diese sehr häufige Operation präziser zu gestalten.Stellen Sie sicher, dass Sie genau angeben, wie diese Funktion mit bestimmten Typen funktionieren soll. PHP verfügt über eine Vielzahl von Typprüfungen oder ähnlichen Funktionen. Stellen Sie daher sicher, dass Sie wissen, wie diese funktionieren. Dies ist ein Beispielvergleich von is_null () und empty ()
Wie Sie sehen können, gibt empty () für alle diese Werte true zurück, is_null () jedoch nur für zwei von ihnen.
quelle
Ich erweitere die Antwort von Ethan Kent . Diese Antwort verwirft Nicht-Null-Argumente, die aufgrund der inneren Funktionsweise von array_filter als falsch ausgewertet werden. Dies ist
coalesce
normalerweise nicht die Funktion einer Funktion. Beispielsweise:Um dies zu überwinden, sind ein zweites Argument und eine Funktionsdefinition erforderlich. Die aufrufbare Funktion gibt an,
array_filter
ob der aktuelle Array-Wert zum Ergebnis-Array hinzugefügt werden soll oder nicht:Es wäre schön, wenn Sie einfach weitergeben könnten
isset
oder'isset'
als 2. Argumentarray_filter
, aber kein solches Glück.quelle
Ich verwende dies derzeit, aber ich frage mich, ob es mit einigen der neuen Funktionen in PHP 5 nicht verbessert werden konnte.
quelle
PHP 5.3+, mit Verschlüssen:
Demo: https://eval.in/187365
quelle