PHP: Null zuweisen, wenn nicht gesetzt?

Lesezeit: 3 Minuten

Benutzer-Avatar
Peter

Gibt es in PHP irgendeine Art von Zuweisen-wenn-nicht-leer-sonst-zuweisen-Null-Funktion?

Ich suche nach einer saubereren Alternative zu den folgenden:

$variable = (!empty($item)) ? $item : NULL;

Es wäre auch praktisch, wenn ich den Standardwert angeben könnte; zum Beispiel möchte ich manchmal ‘ ‘ anstelle von NULL.

Ich könnte meine eigene Funktion schreiben, aber gibt es eine native Lösung?

Vielen Dank!

EDIT: Es sei darauf hingewiesen, dass ich versuche, einen Hinweis auf undefinierte Werte zu vermeiden.

  • !empty($item) && ($variable = $item);

    – Dreieck

    14. Januar 2011 um 22:05 Uhr

  • @Delta: Was passiert dann mit dem Standardwert?

    – BoltClock

    14. Januar 2011 um 22:06 Uhr

  • @Delta Das funktioniert nicht, es wird nicht initialisiert $variable Wenn $item ist leer.

    – Benutzer229044

    14. Januar 2011 um 22:06 Uhr

Benutzer-Avatar
Peter

Aktualisieren

PHP 7 fügt hinzu eine neue Funktion damit umzugehen.

Der Null-Coalescing-Operator (??) wurde als syntaktischer Zucker für den häufigen Fall hinzugefügt, dass ein Ternär in Verbindung mit isset() verwendet werden muss. Es gibt seinen ersten Operanden zurück, falls er existiert und nicht NULL ist; andernfalls gibt es seinen zweiten Operanden zurück.

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';

Außerdem kann es seit 7.4 für dieselbe Variable noch kürzer sein:

$variable ??= null;
// This is equivalent to:
$variable = $variable ?? null;

Es behält den vorhandenen Wert, falls vorhanden, oder weist ihn zu null wenn $variable war nicht eingestellt.

Ursprüngliche Antwort

Am Ende habe ich nur eine Funktion erstellt, um das Problem zu lösen:

public function assignIfNotEmpty(&$item, $default)
{
    return (!empty($item)) ? $item : $default;
}

Beachten Sie, dass $item ist per Referenz übergeben zur Funktion.

Anwendungsbeispiel:

$variable = assignIfNotEmpty($item, $default);

  • Die Referenz ist in der Funktionsdefinition notwendig, nicht im Funktionsaufruf. $variable = assignIfNotEmpty($item, $default); bekommt immer noch $item per Referenz. Sehen php.net/manual/en/language.references.pass.php

    – elreimundo

    11. Dezember 2014 um 21:17 Uhr


  • @elreimundo: Danke. Bearbeitet.

    – Petrus

    12. Dezember 2014 um 4:03 Uhr

  • Diese beiden Codefragmente sind nicht gleich. AssignIfNotEmpty(0, $Standard); gibt $default zurück, während $username = 0 ?? ‘niemand’; wird 0 zurückgeben

    – Ihr gesunder Menschenverstand

    25. Juli um 15:37 Uhr

Benutzer-Avatar
BoltClock

Überarbeiten: Leider erzeugen beide Hinweise auf undefinierte Variablen. Dem könntest du entgegenwirken @Ich vermute.

In PHP 5.3 können Sie dies tun:

$variable = $item ?: NULL;

Oder Sie können dies tun (wie Meagar sagt):

$variable = $item ? $item : NULL;

Ansonsten nein, es geht nicht anders.

  • Das wusste ich bei PHP 5.3 nicht. Das ist auf jeden Fall sauberer!

    – Petrus

    14. Januar 2011 um 22:04 Uhr

  • Macht dies (?:) generiert eine Benachrichtigung, wenn undefiniert ?

    – Isch

    14. Januar 2011 um 22:07 Uhr


  • Ish, das würde ich auch gerne wissen. Das versuche ich zu vermeiden.

    – Petrus

    14. Januar 2011 um 22:09 Uhr

  • @Ish Kumar: Leider tut es das.

    – BoltClock

    14. Januar 2011 um 22:09 Uhr

  • ich vermute $variable = @$item ?: NULL; wäre schöner.

    – Isch

    14. Januar 2011 um 22:14 Uhr


Benutzer-Avatar
Laube

Es gibt den Null-Koaleszenz-Zuweisungsoperator (??=), die nützlich sein kann, wenn Sie einen Nullable-Parameterwert haben und einen Standardwert festlegen möchten, wenn er null ist.

function foo(?Bar $bar): void
{
    $bar ??= new Bar();
}

  • Verfügbar auf PHP 7.4+

    – MingalevME

    15. Dezember 2021 um 9:13 Uhr

Nun ja, es gibt eine native Lösung, um den Wert oder NULL zuzuweisen, wenn die Variable nicht gesetzt war:

$variable = $possibly_unset_var;

Wenn Sie nur den Hinweis unterdrücken möchten (was nichts löst oder den Code sauberer macht), gibt es auch dafür eine native Syntax.

$variable = @$unset_var;

Ich würde dies nicht auf einem Produktionssystem empfehlen, aber:

<?php
//$value=1;
[email protected]$value ?:null;
var_dump($item); // NULL
?>

<?php
$value=1;
[email protected]$value ?:null;
var_dump($item); // 1
?>

1257200cookie-checkPHP: Null zuweisen, wenn nicht gesetzt?

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

Privacy policy