note 111774 added to language.operators.precedence
| From: | ivegner at yandex dot ru | Date: | Wed, 27 Mar 2013 10:56:25 +0000 |
| Subject: | note 111774 added to language.operators.precedence | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-194228@lists.php.net to get a copy of this message | ||
The priority of object member access operator (->) as compared to array member access operator
([]) could be confusing.
<?php
class SomeClass {
public $property = [
'member' => 'expected',
];
public $indirect = 'totally unexpected';
}
$property = [
'member' => 'indirect',
];
$object = new SomeClass;
print $object->$property['member']; // prints 'totally unexpected'
?>
One would expect the last line to be parsed left-to-right, that is,
<?php
($object->$property)['member']
?>
but it is actually parsed as if it were written
<?php
$object->{$property['member']}
?>
which implies brackets ([]) have a higher priority than an arrow (->).
(tested on PHP 5.4.11)
----
Server IP: 69.147.83.199
Probable Submitter: 80.68.252.79
----
Manual Page -- http://php.net/manual/en/language.operators.precedence.php
Edit -- https://master.php.net/note/edit/111774
Del: integrated -- https://master.php.net/note/delete/111774/integrated
Del: useless -- https://master.php.net/note/delete/111774/useless
Del: bad code -- https://master.php.net/note/delete/111774/bad+code
Del: spam -- https://master.php.net/note/delete/111774/spam
Del: non-english -- https://master.php.net/note/delete/111774/non-english
Del: in docs -- https://master.php.net/note/delete/111774/in+docs
Del: other reasons-- https://master.php.net/note/delete/111774
Reject -- https://master.php.net/note/reject/111774
Search -- https://master.php.net/manage/user-notes.php