2013-07-05 6 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। और 2011 से a Symfony issue.

उत्तर

6

मुझे लगता है कि यह एक बग है इसलिए मैंने एक बग रिपोर्ट दायर की।

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

- संपादित करें, कहीं मोटे तौर पर php 5.6.17 के आसपास इस बग निर्धारित किया गया है लगता है।

+3

और कोई और सोचता है कि यह एक विशेषता है ;-) – Tamlyn

4

मैं इस मुद्दे पर भी आया था। मुझे नहीं पता कि इस अपवाद के लिए PHP का तर्कसंगत क्या है।

किसी और के लिए इस पर आने के लिए, SplfileInfo ऑब्जेक्ट की तुलना झूठी से तुलना करने के लिए एक आसान कामकाज है।

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

if (!$b) { 
    echo "This will throw an exception"; 
} 
संबंधित मुद्दे