Frage Die beste Vorgehensweise für nicht null if-Anweisungen


Ich habe meine "Wenn diese Variable nicht leer ist" Statements wie folgt geschrieben:

if ($var != '') {
// Yup
}

Aber ich habe gefragt, ob das stimmt, es hat mir kein Problem bereitet. Hier ist die Antwort, die ich online gefunden habe:

if (!($error == NULL)) {
/// Yup
}

Das sieht tatsächlich länger aus als mein Ansatz, aber ist es besser? Wenn ja warum?


13
2018-01-31 00:52


Ursprung


Antworten:


Eher, als:

if (!($error == NULL))

Mach einfach:

if ($error)

Man könnte meinen, dass das erste klarer ist, aber es ist eher irreführend. Hier ist der Grund:

$error = null;

if (!($error == NULL)) {
    echo 'not null';
}

Dies funktioniert wie erwartet. Die nächsten fünf Werte haben jedoch das gleiche und (zu vielen, unerwarteten) Verhalten:

$error = 0;
$error = array();
$error = false;
$error = '';
$error = 0.0;

Die zweite Bedingung if ($error) macht es deutlicher Typ Gießen ist involviert.

Wollte der Programmierer verlangen, dass der Wert tatsächlich ist NULLhätte er einen strengen Vergleich durchführen müssen, d. if ($error !== NULL)


28
2018-01-31 01:12



Es ist gut zu wissen, was genau in Ihrer Variablen ist, besonders wenn Sie nach nicht initialisierten vs null oder na vs wahr oder falsch gegen leer oder 0 suchen.

Verwenden Sie daher, wie von webbiedave erwähnt, bei der Überprüfung auf null

$error !== null
$error === null
is_null($error)

wenn nach initialisiert gesucht wird, wie gesagt

isset($var)

wenn Sie nach "True" oder "False" suchen oder nach 0 oder einer leeren Zeichenfolge

$var === true
$var === 0
$var === ""

Ich benutze nur leer für '' s und Nullen, da String-Funktionen dazu neigen, inkonsistent zu sein. Wenn nach leer gesucht wird

empty($var)
$var  // in a boolean context

// This does the same as above, but is less clear because you are 
// casting to false, which has the same values has empty, but perhaps
// may not one day.  It is also easier to search for bugs where you
// meant to use ===
$var == false

Wenn semantisch nicht initialisiert dasselbe ist wie einer der obigen Werte, dann initialisiere die Variable am Anfang auf diesen Wert.

$var = ''
...  //some code

if ($var === '') blah blah.

1
2018-03-10 14:45



Warum nicht?

if (!$var)


0
2018-01-31 00:56



Es gibt Wege:

<?php

error_reporting(E_ALL);

$foo = NULL;
var_dump(is_null($inexistent), is_null($foo));

?>

Ein weiterer:

<?php

$var = '';

// This will evaluate to TRUE so the text will be printed.
if (isset($var)) {
    echo "This var is set so I will print.";
}
?>

Um zu überprüfen, ob es leer ist:

<?php
$var = 0;

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}
?>

0
2018-01-31 00:57