7

PHP 的限制之一是对象总是计算为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 左右,这个 bug 似乎已经修复。

于 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 回答