2012-01-31 4 views
13

я писал свою «Если эта переменная не пустая» заявления так:Лучшая практика не нулевое значение, если заявления

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

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

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

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

+4

[is_null] (http://php.net/manual/en/function.is-null.php) может быть полезно использовать. –

+1

'if (empty ($ var))' или 'if (is_null ($ var))' кажется мне лучше для меня –

+0

Я согласен с kingdm. 'empty()' проверяет наличие пустых или нулевых значений. – James

ответ

26

Вместо:

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) делает его более ясным, что типа литья участвует.

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

+0

Очень круто. Спасибо! –

+0

Обратите внимание, что вы можете получить ошибки с помощью метода if ($ error), если переменная, которую вы пытаетесь проверить, не существует и поэтому является нулевой. –

0

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

if (!$var) 

+0

Может существовать переменная –

+2

, и что? в ваших вопросах не указано, что – dynamic

+0

Не будет работать для 'int', когда значение равно 0.' if (0) 'вернет false. –

0

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

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

Это хорошо, чтобы точно знать, что находится в переменной, особенно если вы проверяете для неинициализированным против нулевой или на против истинно или ложно против пустой или 0.

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

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

если проверка initilized как shibly са ID

isset($var) 

если проверка истины или лжи, или 0, или пустой строки

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

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

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. 
Смежные вопросы