Req #48442 [Fbk->Opn]: strpos does not attempt to cast needle as string if needle is an object
| From: | deadowlsurvivor at gmail dot com | Date: | Wed, 30 Apr 2014 23:33:27 +0000 |
| Subject: | Req #48442 [Fbk->Opn]: strpos does not attempt to cast needle as string if needle is an object | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-185537@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=48442&edit=1
ID: 48442
User updated by: deadowlsurvivor at gmail dot com
Reported by: deadowlsurvivor at gmail dot com
Summary: strpos does not attempt to cast needle as string if
needle is an object
-Status: Feedback
+Status: Open
Type: Feature/Change Request
Package: *General Issues
Operating System: Irrelevant
PHP Version: Any
Block user comment: N
Private report: N
New Comment:
Wow, it's been a while since I posted this. It's more consistent with other type casting
operations to type cast to the traditional expected value if applicable (even integers as an ordinal
value). However, to obtain this consistency it would hurt backwards compatibility. I would be
gracious if there was a release of PHP that focused on consistency issues that have been neglected
for reasons of backwards compatibility, which would likely entail a new major version. If
that's not the direction that the PHP developers are interested in, you can go ahead and close
this or otherwise assign it to a new larger version number.
Previous Comments:
------------------------------------------------------------------------
[2014-04-30 22:45:58] levim@php.net
Is this something you are still interested in seeing?
Personally this looks nonsensical; objects aren't integers and so you need to do any conversion
yourself.
------------------------------------------------------------------------
[2009-06-01 00:50:16] deadowlsurvivor at gmail dot com
Description:
------------
Currently, if you attempt to set
Reproduce code:
---------------
class foo {
private $bar;
public function __construct($bar) {
$this->bar = $bar;
}
public function __toString() {
return $bar;
}
}
$a = new foo('abc');
$b = new foo('ab');
$pos = strpos($a,$b);
Expected result:
----------------
$pos holds the value of 0.
Actual result:
--------------
While $a is cast to a string, PHP attempts to cast $b into an integer, as documented. However,
wouldn't it make sense to attempt to cast $b into a string if casting it as an integer fails?
Or even to attempt to cast it into a string first?
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=48442&edit=1