2013-07-05 85 views
7

PHP的侷限性之一是對象始終評估爲true。然而SplFileinfo(和子類,如Symfony的公司UploadedFile)表現不同:爲什麼不能將SplFileInfo轉換爲布爾值?

$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 

這是一個錯誤?測試5.3和5.4。 SplFileObject也會發生。可能的related question。和a Symfony issue從2011.

回答

6

我覺得這是一個錯誤,所以我提出了一個錯誤報告。

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

- 編輯,圍繞PHP 5.6.17大致某處這個錯誤似乎已得到修復。

+3

而其他人認爲這是一個功能;-) – Tamlyn

4

我也遇到過這個問題。我不知道PHP的這個例外理由是什麼。

對於任何遇到此問題的人來說,一個簡單的解決方法就是將SplFileInfo對象與false進行比較。

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

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