<?php
// r() simply returns a reference to a given variable.
function &r(&$v){return $v;}
// Here, we have a scalar $a on which settype() fails to operate if
// parentheses are involved.
print "Scalar demonstration:\n";
$a = 1;
// First with parentheses, then without.
// v v
settype( ( r($a) ) , "boolean"); var_dump($a);
settype( r($a) , "boolean"); var_dump($a);
// ^ ^
// Here is a similar situation where array_pop() fails to operate upon a
// reference to an array if parentheses are involved.
print "\nArray demonstration:\n";
$b = array("c");
// First with parentheses, then without.
// v v
array_pop( ( r($b) ) ); print_r($b);
array_pop( r($b) ); print_r($b);
// ^ ^
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Scalar demonstration:
bool(true)
bool(true)
Array demonstration:
Array
(
)
Array
(
)
Scalar demonstration:
Strict Standards: Only variables should be passed by reference in /in/9QqBr on line 13
int(1)
bool(true)
Array demonstration:
Strict Standards: Only variables should be passed by reference in /in/9QqBr on line 25
Array
(
[0] => c
)
Array
(
)
Output for 5.1.2 - 5.1.6, 5.2.0
Scalar demonstration:
Strict Standards: Only variables should be passed by reference in /in/9QqBr on line 13
int(1)
Strict Standards: Only variables should be passed by reference in /in/9QqBr on line 14
int(1)
Array demonstration:
Strict Standards: Only variables should be passed by reference in /in/9QqBr on line 25
Array
(
[0] => c
)
Strict Standards: Only variables should be passed by reference in /in/9QqBr on line 26
Array
(
[0] => c
)
Output for 5.1.0
Fatal error: fatal flex scanner internal error--end of buffer missed in /in/9QqBr on line 27
Process exited with code 255.