Подтвердить что ты не робот

Лучшая практика для непустых утверждений if

Я писал свои инструкции "Если эта переменная не пустая":

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

Но я спросил, правильно ли это, это не вызвало у меня проблемы. Вот ответ, который я нашел в Интернете:

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

Это на самом деле выглядит дольше, чем мой подход, но лучше ли это? Если да, то почему?

4b9b3361

Ответ 1

Вместо

if (!($error == NULL))

Просто выполните:

if ($error)

Можно было бы подумать, что первый более ясен, но на самом деле он более вводит в заблуждение. Вот почему:

$error = null;

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

Это работает так, как ожидалось. Однако следующие пять значений будут иметь одно и то же и (во многих, неожиданных) поведение:

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

Второй условный if ($error) делает более понятным, что задействован тип casting.

Если программист хотел потребовать, чтобы значение действительно было NULL, он должен был использовать строгое сравнение, т.е. if ($error !== NULL)

Ответ 2

Хорошо знать, что находится в вашей переменной, особенно если вы проверяете неинициализированные vs null или na vs true или false vs empty или 0.

Поэтому, как указано webbiedave, если вы проверяете значение null, используйте

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

если вы проверяете инициализацию, как это было сказано

isset($var)

если вы проверяете значение true или false или 0 или пустую строку

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

Я использую только пустой для 'и nulls, так как строковые функции имеют тенденцию быть непоследовательными. Если проверка на пустой

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

Если семантически неинициализированное значение совпадает с одним из приведенных выше значений, тогда инициализируйте переменную в начале этого значения.

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

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

Ответ 3

Почему просто не

if (!$var)

Ответ 4

Есть способы:

<?php

error_reporting(E_ALL);

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

?>

Другой:

<?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.";
}
?>

Чтобы проверить, не пуст ли он:

<?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';
}
?>

Ответ 5

<?php

if ($_POST){    
if (!preg_match("/^[a-zA-Z -]+$/",$_POST["name"])) {echo "Only letters allowed"; }else{echo "name".$name=$_POST["name"];} 
 echo" <br>"; 
if (!preg_match("/^[a-zA-Z 0-09-9 -:_ -]+$/",$_POST["last_cod"])){echo "Only 09 to az allowed";}else{echo "last_cod".$name=$_POST["last_cod"];}

if (!preg_match("/^[a-zA-Z 0-09-9 -:_ -]+$/",$_POST["recent_cod"])) {echo "Only 09 to az allowed";}else{echo "recent_cod".$recent_cod=$_POST

["recent_cod"];} 
if(!is_numeric($_POST["petrol_rt"])){ echo "only numders are required";}else{echo $petrol_rt=$_POST["petrol_rt"]."<br>";}

if(!is_numeric($_POST["deasel_rt"])){ echo "only numders are required";}else{echo $deasel_rt=$_POST["deasel_rt"]."<br>";}}


if($_POST===true){ echo "its ok";}else {echo "not ok";}

Любой говорит мне, если все для всех сообщение не пусто! затем выполните задачу для хранения данных. Но здесь возникает некоторая проблема, если ($ _post! = "") Пишет нормально, но повторный запуск записи не разрешен