Req #69486 [Opn]: Add support foir _toBoolean magic method

From: Date: Mon, 27 Apr 2015 23:02:37 +0000
Subject: Req #69486 [Opn]: Add support foir _toBoolean magic method
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-192364@lists.php.net to get a copy of this message
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


Thread (1 message)

  • cmb@php.net
  • Unknown Message
    • cmb@php.net
« previous php.bugs (#192364) next »