Edit report at https://bugs.php.net/bug.php?id=69486&edit=1
ID: 69486
Updated by: cmb@php.net
Reported by: adrian at adecsys dot com
Summary: Add support foir _toBoolean magic method
Status: Open
Type: Feature/Change Request
Package: Class/Object related
-Operating System: CentOS/WinXP
+Operating System: *
PHP Version: 5.4.40
Block user comment: N
Private report: N
New Comment:
Proposal A would constitute a BC break, though. Consider existing
code relying on boolean type juggling (or a cast) to test for
object existence, where the object has a __toString method
returning a "falsy" value (like in the given test script).
With regard to proposal B: how is int (or float) juggling, for
instance, supposed to work?
(int) $obj->__toString()
(int) $obj->__toBoolean()
(int) $obj
Previous Comments:
------------------------------------------------------------------------
[2015-04-20 08:02:26] adrian at adecsys dot com
Description:
------------
---
From manual page: http://www.php.net/language.oop5.magic
---
The inbuilt conversion of objects to Boolean, especially for expression evaluation, is poor and
could be greatly improved.
I propose one of two mechanisms:
(a) Given the existing __toString() magic method, use this as an intermediate step in the conversion
to a bool value, following the documented rules for string.
or
(b) add support for an explicit __toBoolean magic method, which allows the implentation to take full
control over the resulting type.
Thank you
Test script:
---------------
class NullObject {
public function __toString() { return ""; }
public function __toBoolean() { return false; }
public function __call($name , $arguments) { return $this; }
}
$test = new NullObject();
echo $test ? "TRUE" : "FALSE" ;
// TRUE, but logically expect FALSE
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=69486&edit=1