2011-08-22 31 views
12

Tôi đã tự hỏi sự khác biệt giữa hai trường hợp dưới đây là gì và bạn nên chọn loại nào?

$val = 0; 

if (!$val) { 
    //True 
} 

if (empty($val) { 
    //It's also True 
} 

Trả lời

21

Hãy xem PHP type comparison table.

Nếu bạn kiểm tra bảng, bạn sẽ nhận thấy rằng đối với tất cả các trường hợp, empty($x) giống với !$x. Vì vậy, nó đi xuống để xử lý các biến uninitialised. !$x tạo một E_NOTICE, trong khi empty($x) thì không.

+0

+1. Cũng lưu ý rằng điều này giống như '! = [Boolean result of evaluation $ val]', do đó, cột cuối cùng của bảng đầu tiên chủ yếu là những gì bạn nên xem xét. – rockerest

+0

+1 Rất dễ tìm trên bảng so sánh. –

+0

Cảm ơn, đó là những gì tôi cần biết. Vì vậy, tôi đoán trống ($ x) là cách tiếp cận an toàn hơn. Tôi cho rằng sự khác biệt là hiệu suất không đáng kể phải không? – Bachx

4

Nếu bạn sử dụng trống và biến chưa bao giờ được đặt/tạo, sẽ không có cảnh báo/lỗi nào được ném.

3

Hãy xem:

empty documentation:

Những điều sau đây được coi là empty:

  • "" (một chuỗi rỗng)
  • 0 (0 là một số nguyên)
  • 0.0 (0 như một phao)
  • "0" (0 như là một chuỗi)
  • NULL
  • FALSE
  • array() (một mảng trống)
  • var $var; (một biến khai báo, nhưng không có một giá trị trong một lớp)

Booleans documentation:

Khi chuyển sang boolean, các giá trị sau đây được coi FALSE:

  • boolean FALSE tự
  • số nguyên 0 (zero)
  • phao 0.0 (zero)
  • chuỗi trống và chuỗi "0"
  • một mảng với zero yếu tố
  • một đối tượng với không biến thành viên (PHP 4 chỉ)
  • loại đặc biệt NULL (bao gồm cả các biến unset)
  • SimpleXML đối tượng được tạo từ thẻ trống

Có vẻ như sự khác biệt duy nhất (liên quan đến giá trị kết quả) là cách một cá thể SimpleXML được xử lý.Mọi thứ khác dường như cho kết quả tương tự (nếu bạn đảo ngược diễn viên boolean của khóa học).

+0

Vậy kết luận là gì? Từ danh sách, boolean có vẻ như kiểm tra mạnh mẽ hơn ... –

+0

Điều này là không chính xác. Một thử nghiệm nhanh tại trình bao PHP cho thấy rằng 'empty' xử lý các cá thể' SimpleXMLElement' trống rỗng giống như '!'; nó chỉ đơn giản là một lỗi trong tài liệu 'empty' mà chúng không được đề cập ở đó. –

Các vấn đề liên quan