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
也会发生这种情况。可能related question。从2011年开始a Symfony issue。
答案 0 :(得分:7)
答案 1 :(得分: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";
}