ID: 8796
User Update by: [EMAIL PROTECTED]
Status: Analyzed
Bug Type: Feature/Change Request
Description: "$foo->bar->baz" ambiguity in double quoted strings

Haven't checked out here-docs either.

On the backwards compatibility issue, I can't see that there would be
(much of) one.  If people aren't using the $foo->bar->baz syntax
within strings then they aren't affected.  If people are using the
syntax it's either not doing what they want/expect or they're plain
weird :-)

Incorporating such an enhancement and saying "$foo->bar->baz in
{strings, here-docs} now does what you'd expect" isn't likely to
cause many ripples (IMHO).

Previous Comments:

[2001-02-20 01:26:21] [EMAIL PROTECTED]
there is nothing ambigous (the way you described), except if
enclosed by double quotes in strings, we should maintain
backwards compatibility here, but maybe we shouldn't... :)

I guess (not verified) this applies to here-docs too


[2001-01-19 02:12:19] [EMAIL PROTECTED]
In PHP4 it is possible to construct an object and refer to 
a member using the notation:


where foo is the object and bar is the member.

There has been some discussion in the documentation
area on OO about the inability to further extend this 
notation to do something like:

print "$foo->bar->baz";

The reason given for not being able to do this is due
to the ambiguity of the multiple -> operators.

Yes, the -> operator could be ambiguous.  The '+', '*', '%', ...  operators could also 
be ambiguous.  Each language which
uses such binary operators disambiguates them by defining
and associativity and precedence to these operators.

Similarly, for languages which support similar semantics
for an -> operator there is a disambiguating assignment 
of associativity and precedence which allows constructs
like $foo->bar->baz to be unambiguously interpreted.

I am requesting that the specification for PHP be broadened
to include sufficient associativity and precedence constraints on -> to allow 
$foo->bar->baz to be disambiguated.

I believe the most common disambiguation would have:


refer to "the value of the member 'baz' of the object denoted by the value of the 
member 'bar' of the object denoted by the value of the variable foo."

Of course, I forget at the moment whether that's left- or right-associative, and the 
precedence should presumably be fine set at its current level.


Full Bug description available at:

PHP Development Mailing List <>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to