PHP 8.0: +
/-
operators take higher precedence when used with concat (.
) operator
PHP 7.3 deprecated unparenthesized expressions containing '.' and '+'/'-'. From PHP 8.0, operator precedence is enforced, and this deprecation notice is no longer raised.
When an expression contains the contact operator (.
) and +
/-
operators, +
/-
operators take precedence.
For example, consider the following snippet:
echo 35 + 7 . '.' . 0 + 5;
Prior to PHP 8, this snippet will be evaluated in the order of the operators.
From PHP 8.0 and later, the +
and -
operators take a high a precedence. If you have been ignoring the deprecation notices since PHP 7.3, you can have different results:
Pre-PHP 8
echo 35 + 7 . '.' . 0 + 5;
// Deprecated: The behavior of unparenthesized expressions containing both '.' and '+'/'-' will change in PHP 8: '+'/'-' will take a higher precedence in /in/n3lVl on line 3
// 47
PHP 8 and later
echo 35 + 7 . '.' . 0 + 5;
// 42.5
This is equivalent to (35 + 7) . '.' . (0 + 5)
.
Backwards compatibility impact
If you have any existing code that raised a deprecation notice due to expressions that contained .
and +
/-
operators in same expression without parenthesis, note that the output of in PHP 8 can be different.
Make sure to properly add paranthesis to your existing expressions to express their meaning.
- echo 35 + 7 . '.' . 0 + 5;
+ echo (35 + 7) . '.' . (0 + 5);