Req #54082 [Com]: Cast array key objects to string
| From: | zyss at mail dot zp dot ua | Date: | Wed, 11 Jan 2017 14:39:45 +0000 |
| Subject: | Req #54082 [Com]: Cast array key objects to string | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-206520@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=54082&edit=1
ID: 54082
Comment by: zyss at mail dot zp dot ua
Reported by: slusarz at curecanti dot org
Summary: Cast array key objects to string
Status: Open
Type: Feature/Change Request
Package: Arrays related
Operating System: Irrelevant
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
This feature is much awaited, it has wide practical application.
For example in ORM system fields references could be objects:
class FieldReference {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function __toString() {
return $this->name;
}
}
$ref = new FieldReference('field');
echo $ref, "\n"; // outputs: field, __toString() method is called
$select = [ // works fine but (string) clutters code
(string) $ref => 'value'
];
var_dump($select); // outputs: array(1) { ["field"]=> string(5) "value" }
$select = [ // looks fine but triggers: Warning: Illegal offset type
(string) $ref => 'value'
];
var_dump($select);
Previous Comments:
------------------------------------------------------------------------
[2015-12-20 15:45:15] reallfqq-php at yahoo dot fr
Still true in PHP 7.0.0...
Will you fix it?
------------------------------------------------------------------------
[2014-05-25 01:44:16] chx@php.net
This is an absolute pain when dealing with strings that might be returned from autoescaped Twig as
Twig_Markup objects. I'd warmly appreciate a bugfix even in 5.4...
------------------------------------------------------------------------
[2011-10-14 22:02:07] maschingan at gmail dot com
The same issue.
------------------------------------------------------------------------
[2011-02-23 19:47:46] slusarz at curecanti dot org
Description:
------------
Per http://www.php.net/manual/en/language.types.array.php,
array keys can be integers or strings.
If an object can be converted to a string representation (i.e. it has a __toString() method
defined), it should be automatically cast to a string. Currently, an error is thrown instead.
Current workaround is to manually cast to string when setting a key.
Test script:
---------------
class Foo {
public function __toString() {
return 'A';
}
}
$a = new Foo();
$b = array($a => 1);
print_r($b);
Expected result:
----------------
Array
(
'A' => 1
)
Actual result:
--------------
PHP Warning: Illegal offset type [...]
Array
(
)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=54082&edit=1