Лучшая практика для непустых утверждений if
Я писал свои инструкции "Если эта переменная не пустая":
if ($var != '') {
// Yup
}
Но я спросил, правильно ли это, это не вызвало у меня проблемы. Вот ответ, который я нашел в Интернете:
if (!($error == NULL)) {
/// Yup
}
Это на самом деле выглядит дольше, чем мой подход, но лучше ли это? Если да, то почему?
Ответы
Ответ 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! = "") Пишет нормально, но повторный запуск записи не разрешен