2012-01-31 14 views
13

Tôi đã viết của tôi "Nếu biến này là không có sản phẩm nào" tuyên bố như vậy:Các thực hành tốt nhất cho không null nếu phát biểu

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

Nhưng tôi hỏi nếu điều này là đúng, nó không có gây ra vấn đề cho tôi. Đây là câu trả lời tôi tìm thấy trực tuyến:

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

Điều này thực sự trông dài hơn cách tiếp cận của tôi, nhưng tốt hơn? Nếu vậy, tại sao?

+4

[is_null] (http://php.net/manual/en/function.is-null.php) có thể tốt để sử dụng. –

+1

'if (empty ($ var))' hoặc 'if (is_null ($ var))' có vẻ tốt hơn cho tôi –

+0

Tôi đồng ý với kingdm. 'empty()' kiểm tra các giá trị rỗng hoặc rỗng. – James

Trả lời

26

Thay vì:

if (!($error == NULL)) 

Đơn giản chỉ cần làm:

if ($error) 

Một sẽ nghĩ rằng người đầu tiên là rõ ràng hơn, nhưng nó thực sự là sai lầm hơn. Đây là lý do:

$error = null; 

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

Điều này hoạt động như mong đợi. Tuy nhiên, năm giá trị tiếp theo sẽ có giống nhau và (đến nhiều bất ngờ,) hành vi:

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

Thứ hai có điều kiện if ($error) làm cho nó rõ ràng hơn rằng loại đúc tham gia.

Nếu các lập trình viên muốn đòi hỏi rằng giá trị thực sự được NULL, anh ta nên đã sử dụng một so sánh nghiêm ngặt, ví dụ, if ($error !== NULL)

+0

Rất tuyệt. Cảm ơn bạn! –

+0

Lưu ý rằng bạn có thể gặp lỗi với phương pháp if ($ error), nếu biến bạn đang cố kiểm tra không tồn tại và do đó không có. –

0

Tại sao chỉ không

if (!$var) 

+0

Biến có thể tồn tại mặc dù –

+2

vậy thì sao? câu hỏi của bạn không chỉ rõ rằng – dynamic

+0

Sẽ không hoạt động với 'int' khi giá trị là 0. Một' if (0) 'sẽ trả về false. –

0

Có nhiều cách:

<?php 

error_reporting(E_ALL); 

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

?> 

Một:

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

Để kiểm tra xem nó rỗng:

<?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

Nó là tốt để biết chính xác những gì có trong biến của bạn, đặc biệt là nếu bạn đang kiểm tra cho uninitialized vs null hoặc na vs đúng hay sai vs rỗng hoặc 0.

vì vậy, như đã đề cập bởi webbiedave, nếu kiểm tra null, sử dụng

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

nếu kiểm tra initilized, như sa shibly id

isset($var) 

nếu kiểm tra các chuỗi đúng hay sai, hoặc 0 hoặc để trống

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

tôi chỉ sử dụng sản phẩm nào cho '' s và null từ chức năng chuỗi có xu hướng không phù hợp.Nếu kiểm tra để trống

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 

Nếu ngữ nghĩa chưa được khởi tạo giống như một trong các giá trị trên, thì hãy khởi tạo biến ở đầu giá trị đó.

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

if ($var === '') blah blah. 
Các vấn đề liên quan