2013-07-05 43 views
7

Một trong những hạn chế của PHP là các đối tượng luôn được đánh giá là true. Tuy nhiên SplFileinfo (và các lớp con như Symfony của UploadedFile) hành xử khác nhau:Tại sao SplFileInfo không thể chuyển đổi thành boolean?

$a = new ArrayIterator();  // or any other class 
$b = new SplFileInfo(__FILE__); // file used is not important 

if ($a) echo 'true'; // 'true' 
if (!$a) echo 'false'; // nothing because $a is true 

if ($b) echo 'true'; // 'true' 
if (!$b) echo 'false'; // Catchable fatal error: Object of class 
         // SplFileInfo could not be converted to boolean 

Đây có phải là một lỗi? Thử nghiệm trong 5.3 và 5.4. Cũng xảy ra với SplFileObject. Có thể related question. Và a Symfony issue từ năm 2011.

Trả lời

6

Tôi cảm thấy đó là lỗi nên tôi đã gửi báo cáo lỗi.

https://bugs.php.net/bug.php?id=65213

- Chỉnh sửa, đâu đó khoảng xung quanh php 5.6.17 lỗi này dường như đã được cố định.

+3

Và người khác nghĩ đó là tính năng ;-) – Tamlyn

4

Tôi cũng gặp phải vấn đề này. Tôi không biết những gì hợp lý của PHP cho ngoại lệ này là.

Đối với bất kỳ ai khác gặp phải vấn đề này, cách giải quyết dễ dàng chỉ là so sánh đối tượng SplFileInfo với sai.

$b = new SplFileInfo(__FILE__); 
if ($b != false) { 
    echo "This will not throw an exception"; 
} 

if (!$b) { 
    echo "This will throw an exception"; 
} 
Các vấn đề liên quan