Fix print precedence

This commit is contained in:
Nikita Popov
2019-03-15 09:52:05 +01:00
parent b0dadd509b
commit 63d72a6df5
2 changed files with 48 additions and 48 deletions

View File

@@ -322,7 +322,6 @@ intrinsic:
eval-intrinsic
exit-intrinsic
isset-intrinsic
print-intrinsic
-->
<pre>
@@ -331,7 +330,6 @@ intrinsic:
<i><a href="#grammar-eval-intrinsic">eval-intrinsic</a></i>
<i><a href="#grammar-exit-intrinsic">exit-intrinsic</a></i>
<i><a href="#grammar-isset-intrinsic">isset-intrinsic</a></i>
<i><a href="#grammar-print-intrinsic">print-intrinsic</a></i>
</pre>
**Semantics**
@@ -521,48 +519,6 @@ $v1 = TRUE; $v2 = 12.3; $v3 = NULL;
isset($v1, $v2, $v3); // results in FALSE
```
#### print
**Syntax**
<!-- GRAMMAR
print-intrinsic:
'print' expression
-->
<pre>
<i id="grammar-print-intrinsic">print-intrinsic:</i>
print <i><a href="#grammar-expression">expression</a></i>
</pre>
**Constraints**
*expression* value must be [convertable to a string](08-conversions.md#converting-to-string-type).
In particular, it should not be an array and if it is an object, it must implement
a [`__toString` method](14-classes.md#method-__tostring).
**Semantics**
After converting its *expression*'s value to a string, if necessary,
`print` writes the resulting string to [`STDOUT`](06-constants.md#core-predefined-constants).
Unlike [`echo`](11-statements.md#the-echo-statement), `print` can be used in any context
allowing an expression. It always returns the value 1.
See also: [double quoted strings](09-lexical-structure.md#double-quoted-string-literals) and
[heredoc documents](09-lexical-structure.md#heredoc-string-literals), [conversion to string](08-conversions.md#converting-to-string-type).
**Examples**
```PHP
$v1 = TRUE;
$v2 = 123;
print '>>' . $v1 . '|' . $v2 . "<<\n"; // outputs ">>1|123<<"
print ('>>' . $v1 . '|' . $v2 . "<<\n"); // outputs ">>1|123<<"
$v3 = "qqq{$v2}zzz";
print "$v3\n"; // outputs "qqq123zzz"
$a > $b ? print "..." : print "...";
```
### Anonymous Function Creation
**Syntax**
@@ -3219,6 +3175,50 @@ foreach ($g as $yielded) {
}
```
## Print expression
**Syntax**
<!-- GRAMMAR
print-expression:
yield-expression
'print' print-expression
-->
<pre>
<i id="grammar-print-expression">print-expression:</i>
<i><a href="#grammar-yield-expression">yield-expression</a></i>
print <i><a href="#grammar-print-expression">print-expression</a></i>
</pre>
**Constraints**
*print-expression* value must be [convertable to a string](08-conversions.md#converting-to-string-type).
In particular, it should not be an array and if it is an object, it must implement
a [`__toString` method](14-classes.md#method-__tostring).
**Semantics**
After converting *print-expression*'s value into a string, if necessary,
`print` writes the resulting string to [`STDOUT`](06-constants.md#core-predefined-constants).
Unlike [`echo`](11-statements.md#the-echo-statement), `print` can be used in any context
allowing an expression. It always returns the value 1.
See also: [double quoted strings](09-lexical-structure.md#double-quoted-string-literals) and
[heredoc documents](09-lexical-structure.md#heredoc-string-literals), [conversion to string](08-conversions.md#converting-to-string-type).
**Examples**
```PHP
$v1 = TRUE;
$v2 = 123;
print '>>' . $v1 . '|' . $v2 . "<<\n"; // outputs ">>1|123<<"
print ('>>' . $v1 . '|' . $v2 . "<<\n"); // outputs ">>1|123<<"
$v3 = "qqq{$v2}zzz";
print "$v3\n"; // outputs "qqq123zzz"
$a > $b ? print "..." : print "...";
```
## Logical AND Operator (form 2)
**Syntax**

View File

@@ -389,7 +389,6 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md#
<i><a href="#grammar-eval-intrinsic">eval-intrinsic</a></i>
<i><a href="#grammar-exit-intrinsic">exit-intrinsic</a></i>
<i><a href="#grammar-isset-intrinsic">isset-intrinsic</a></i>
<i><a href="#grammar-print-intrinsic">print-intrinsic</a></i>
<i id="grammar-empty-intrinsic">empty-intrinsic:</i>
empty ( <i><a href="#grammar-expression">expression</a></i> )
@@ -410,9 +409,6 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md#
<i><a href="#grammar-variable">variable</a></i>
<i><a href="#grammar-variable-list">variable-list</a></i> , <i><a href="#grammar-variable">variable</a></i>
<i id="grammar-print-intrinsic">print-intrinsic:</i>
print <i><a href="#grammar-expression">expression</a></i>
<i id="grammar-anonymous-function-creation-expression">anonymous-function-creation-expression:</i>
static<sub>opt</sub> function &amp;<sub>opt</sub> ( <i><a href="#grammar-parameter-declaration-list">parameter-declaration-list</a></i><sub>opt</sub> ) <i><a href="#grammar-anonymous-function-use-clause">anonymous-function-use-clause</a></i><sub>opt</sub> <i><a href="#grammar-return-type">return-type</a></i><sub>opt</sub> <i><a href="#grammar-compound-statement">compound-statement</a></i>
@@ -681,6 +677,10 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md#
yield <i><a href="#grammar-yield-expression">yield-expression</a></i>
yield <i><a href="#grammar-yield-from-expression">yield-from-expression</a></i> =&gt; <i><a href="#grammar-yield-expression">yield-expression</a></i>
<i id="grammar-print-expression">print-expression:</i>
<i><a href="#grammar-yield-expression">yield-expression</a></i>
print <i><a href="#grammar-print-expression">print-expression</a></i>
<i id="grammar-logical-AND-expression-2">logical-AND-expression-2:</i>
<i><a href="#grammar-yield-expression">yield-expression</a></i>
<i><a href="#grammar-logical-AND-expression-2">logical-AND-expression-2</a></i> and <i><a href="#grammar-yield-expression">yield-expression</a></i>