2013-07-05 17 views
7

PHPの制限の1つは、オブジェクトが常に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"; 
} 
関連する問題