php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #9983 Operator Precedence Clarification/Additions
Submitted: 2001-03-26 00:17 UTC Modified: 2011-12-04 04:05 UTC
Votes:5
Avg. Score:3.6 ± 0.8
Reproduced:1 of 2 (50.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: yohgaki at dd dot iij4u dot or dot jp Assigned: frozenfire (profile)
Status: Closed Package: Documentation problem
PHP Version: Any OS: Any
Private report: No CVE-ID: None
 [2001-03-26 00:17 UTC] yohgaki at dd dot iij4u dot or dot jp
Following code, needs "()" to get expected value. 

$bar = true; 
$str = "TEST". ($bar ? 'true' : 'false') ."TEST"; 

Without "(" and ")", only "true" will be in $str. 
(PHP4.0.4pl1/Apache DSO/Linux, PHP4.0.5RC1/Apache DSO/W2K Server) 
If this is expected behavior in PHP, it would better to be described in the Manual.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-03-26 03:46 UTC] sniper@php.net
Please read this manual page:

http://www.php.net/manual/en/language.operators.precedence.php

--Jani

 [2001-03-26 05:10 UTC] yohgaki at dd dot iij4u dot or dot jp
I read precedence list again. There is "." operator listed and has higher precedence than "?:" operator. So PHP is working as expected. I didn't see "." It was hard to see on my browser. Thanks.

Anyway, I have suggestion for the manual page, so I changed status to open as "Documentation Problem".

I think the manual page better to have relevant language constructs in the precedence list even if it is not a actually a operator in PHP. (Such as "()", "{}", "::", "->", unary "-","+". It seems these are not a operator in PHP, since they are not listed. Not sure though.) Only "()" is described in the section. All of them affects how expressions are evaluated in script and I think precedence for these is important as operator precedence because programmers want expressions are evaluated as expected. 

How about change the section title from "Operator Precedence" to "Precedence"? Then documentation can include anything that can affects expression and still have consistency with section title.

It also would be nice to have a little explaination for each operator in the precedence list. Since it is ambigous if listed operator is unary or binary. For example, unary "-" should have higher precedence than binary "-". It would be obvious for most users, but it may be usuful for someone.

 [2001-06-27 01:49 UTC] danbeck@php.net
Changing description to be more meaningful for someone who wants to tackle this.
 [2001-06-27 03:37 UTC] yohgaki at dd dot iij4u dot or dot jp
This is a suggestion for improving the manual.
(I don't mind at all if you close this :)

Reference is for PHP programmers, so I think precidence section is better to include more operators.

For example, it does not matter if unary '+/-', array '[]', member selecter '->', etc are treated by parser or internal function for programmers. Programmers don't cares about it when they are programming in some language, right?

Important thing for programmers is the precedence itself in some expression. 
How about add more description for precedence just like other books or references for programming languages? 

I feel precedence is not described fully in current manual and it's worth the effort.

----Another Releated Suggestion----
I see confusion occasionally in mail lists for variables in string. Since parser behaives differently when parsing variables in strings.

This may be one of the reason why '->','[]',unary'+/-' is not in the precedence section. They wouldn't work when they are in a string. (Some of them work with newer PHP, not recommended(?) syntax, though)

How about describe these differences in the manual also? 

 [2002-02-07 09:37 UTC] hek at loudoun dot net
This is substantially the same as Bug#15368.
 [2002-02-27 09:22 UTC] sander@php.net
=== from #15368 ===
The operators seciot of the online PHP Manual omits mention of:

   {} -- used to extarct a particular character from a string (with an aside about using {} to embed variable values in strings);

   [] -- the array subscriptor (which is actually listed inthe operator precedence table, though mentioned nowhere else);

   -> -- the object property/method accessor;

   & -- the reference operator (also listed in the precendence table, though never explained elsewhere);

   => -- the array key-to-value keyword (not techniclly an operator, I know, but because it's so "punctuation-y", probably a good thing to comment on in this section).

Also, the operators precendence table at
http://www.php.net/manual/en/language.operators.precedence.php should probably hyperlink each operator to the appropriate page describing it.

And finally, it might make more sense to put the operator precendence information (including the new and improved table with hyperlinks) right on the first page of the operators section (rather than the arithmentic
operators information).
 [2002-07-02 09:12 UTC] eru@php.net
Redefined Version and OS for the Bughunt. Still open, still needs clarification from some experienced doc-writer.

 [2011-12-04 04:05 UTC] frozenfire@php.net
This behaviour seems no longer to apply. In the example code, $str will now 
contain "TESTtrueTEST".
 [2011-12-04 04:05 UTC] frozenfire@php.net
-Status: Verified +Status: Closed -Assigned To: +Assigned To: frozenfire
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Apr 19 10:01:28 2024 UTC