2013-07-05 21 views
7

Jednym z ograniczeń PHP jest to, że obiekty zawsze oceniają na true. Jednak SplFileinfo (i podklasy, takich jak Symfony na UploadedFile) zachowują się inaczej:Dlaczego nie można przekonwertować SplFileInfo na wartość 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 

Czy to błąd? Testowane w ppkt 5.3 i 5.4. Zdarza się też z SplFileObject. Możliwe related question. I a Symfony issue od 2011.

Odpowiedz

6

Czuję, że to błąd, więc złożyłem raport o błędzie.

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

- Edycja, gdzieś mniej więcej około PHP 5.6.17 ten błąd wydaje się być rozwiązany.

+3

A ktoś inny myśli, że to funkcja ;-) – Tamlyn

4

Natknąłem się również na tę kwestię. Nie wiem, co PHP jest racjonalne dla tego wyjątku.

Dla każdego, kto się na to natknął, łatwym rozwiązaniem jest porównanie obiektu SplFileInfo z wartością false.

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

if (!$b) { 
    echo "This will throw an exception"; 
}