Edit report at http://bugs.php.net/bug.php?id=52482&edit=1
ID: 52482 User updated by: sjon at react dot com Reported by: sjon at react dot com Summary: Casting SimpleXMLElement('0') to boolean results in true Status: Open Type: Feature/Change Request Package: SimpleXML related Operating System: Linux PHP Version: Irrelevant Block user comment: N New Comment: Then why does this work correctly? var_dump((int)new SimpleXMLElement("<w>2</w>")); (returns int(2)) The reason is SimpleXMLElements do not follow the normal rules, have a look at simplexml.c line 1762: if (type == IS_BOOL) { node = php_sxe_get_first_node(sxe, NULL TSRMLS_CC); prop_hash = sxe_get_prop_hash(readobj, 1 TSRMLS_CC); INIT_PZVAL(writeobj); ZVAL_BOOL(writeobj, node != NULL || zend_hash_num_elements(prop_hash) > 0); zend_hash_destroy(prop_hash); efree(prop_hash); return SUCCESS; } Previous Comments: ------------------------------------------------------------------------ [2010-07-29 11:02:50] sala...@php.net You are not casting the string "0" to boolean, you're casting the object. As such, it follows normal rules for casting objects. The only time a SimpleXMLElement will cast to boolean false is with an "empty" element (e.g. "<w/>"). If you want your sample element to cast to false, you will first need to cast to a string: (bool) (string) new SimpleXMLElement... ------------------------------------------------------------------------ [2010-07-29 10:50:11] sjon at react dot com Description: ------------ I understand the bug I am reporting is described in the manual, which is why I am reporting it as a feature request. When casting SimpleXMLElements to boolean, most values comply with the way PHP casts them. There is however one exception: the string '0' is cast to true, which is unexpected. This is especially annoying when using XmlRpc, which uses <boolean>0</boolean> for its values. Test script: --------------- <?php var_dump((bool)new SimpleXMLElement("<w>0</w>")); Expected result: ---------------- bool(false) Actual result: -------------- bool(true) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52482&edit=1