|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #54082 Cast array key objects to string
Submitted: 2011-02-23 19:47 UTC Modified: -
Avg. Score:4.2 ± 0.8
Reproduced:16 of 16 (100.0%)
Same Version:6 (37.5%)
Same OS:7 (43.8%)
From: slusarz at curecanti dot org Assigned:
Status: Open Package: Arrays related
PHP Version: Irrelevant OS: Irrelevant
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please — but make sure to vote on the bug!
Your email address:
Solve the problem:
37 + 27 = ?
Subscribe to this entry?

 [2011-02-23 19:47 UTC] slusarz at curecanti dot org
Per, 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);


Expected result:
    'A' => 1

Actual result:
PHP Warning:  Illegal offset type [...]


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2011-10-14 22:02 UTC] maschingan at gmail dot com
The same issue.
 [2014-05-25 01:44 UTC]
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...
 [2015-12-20 15:45 UTC] reallfqq-php at yahoo dot fr
Still true in PHP 7.0.0...
Will you fix it?
 [2017-01-11 14:39 UTC] zyss at mail dot zp dot ua
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'
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Sat Jun 19 16:01:23 2021 UTC