php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #10770 . (concatenation) preceeds mathematical operations in order of execution
Submitted: 2001-05-09 19:21 UTC Modified: 2001-05-09 19:57 UTC
From: vitaliyf at gameaholic dot com Assigned:
Status: Closed Package: Feature/Change Request
PHP Version: 4.0.5 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: vitaliyf at gameaholic dot com
New email:
PHP Version: OS:

 

 [2001-05-09 19:21 UTC] vitaliyf at gameaholic dot com
<?
  $i=10;
  print "hello " . $i-2 . " world";
?>

will output:   -2 world

("hello " . $i is evaluated into "hello 10", then 2 is subtracted (by casting "hello 10" into a 0, then subtracting 2).  Then "world" is appened, thus giving us "-2 world")

I think this might be way counter-intuitive to what should be happening: - (or all other operations) should be avaluated first, and concatenation last, producing "hello 8 world".

Or how about this example, which definately can confuse some people:

print "Hello is less than " . 1+strlen('hello') . " characters long.";

Workaround: use () to arrange things to be executed in proper order but that might not be obvious for someone who doesn't know about this situation.

PS:
Thanks PartyZan for finding this.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-05-09 19:57 UTC] sniper@php.net
http://www.php.net/manual/en/language.operators.precedence.php

. and - are equal. Use ()'s to override it.

--Jani

 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 22 01:01:30 2024 UTC