ID:               34199
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Critical
 Bug Type:         Scripting Engine problem
 Operating System: *
 PHP Version:      5CVS-2005-08-20 (CVS)
 New Comment:

This outputs nothing with PHP 5, but does give "yes" with 4.4:

<?php
$foo = new StdClass();
if(!$foo) echo "empty object: yes";
?>

So in PHP5, an "empty" object is still true.
(then again, empty array() is considered false)
Was the change intentional? And if so, why?



Previous Comments:
------------------------------------------------------------------------

[2005-08-20 22:53:04] [EMAIL PROTECTED]

Marking it critical.  I think we need to get this cleaned up before 5.1
goes out.  Having 2 different opcodes handling this that can potentially
return conflicting results causes all sorts of confusion.  Took me about
an hour working backwards through assumptions before I finally figured
out that if() and if(!) were to blame.

------------------------------------------------------------------------

[2005-08-20 22:33:31] [EMAIL PROTECTED]

if ($kids) if handled by ZEND_JMPZ_SPEC_CV_HANDLER which ends up
calling i_zend_is_true and returning TRUE because $kids is an object.

if (! $kids) is handled by ZEND_BOOL_NOT_SPEC_CV_HANDLER which calls
convert_to_boolean and ends up calling the objects cast_object handler,
which in this case is sxe_object_cast and returns FALSE because object
is really empty.

------------------------------------------------------------------------

[2005-08-20 21:13:15] [EMAIL PROTECTED]

Description:
------------
An empty SimpleXMLElement object is both true and false

Reproduce code:
---------------
$xml = "<root></root>";
$xml = simplexml_load_string($xml);
$kids = $xml->children();
if($kids) echo "True";
if(!$kids) echo "False";

Expected result:
----------------
False

Actual result:
--------------
TrueFalse


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=34199&edit=1

Reply via email to