2013-07-05 14 views
7

Uno dei limiti di PHP è che gli oggetti vengono sempre valutati su true. Tuttavia SplFileinfo (e sottoclassi, come Symfony di UploadedFile) si comportano in modo diverso:Perché SplFileInfo non può essere convertito in booleano?

$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 

È questo un bug? Testato in 5.3 e 5.4. Accade anche con SplFileObject. Possibile related question. E a Symfony issue dal 2011.

risposta

6

Penso che sia un errore quindi ho presentato una segnalazione di errore.

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

- Modifica, da qualche parte all'incirca intorno php 5.6.17 questo bug sembra essere stato risolto.

+3

E qualcun altro pensa che sia una caratteristica ;-) – Tamlyn

4

Mi sono imbattuto anche in questo problema. Non so quale sia il razionale di PHP per questa eccezione.

Per chiunque stia incontrando questo, una facile soluzione è solo per confrontare l'oggetto SplFileInfo su falso.

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

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