7

PHP の制限の 1 つは、オブジェクトが常にtrue. ただしSplFileinfo(および Symfony の などのサブクラスUploadedFile) は異なる動作をします:

$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ます。関連する可能性のある質問。そして2011年からのSymfonyの問題。

4

2 に答える 2

7

バグだと思うので、バグレポートを提出しました。

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

-- 編集、およそ php 5.6.17 あたりで、このバグは修正されたようです。

于 2013-07-08T02:19:59.717 に答える
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";
}
于 2014-08-27T05:55:21.223 に答える