<?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);
// ^ ^
Scalar demonstration:
Strict Standards: Only variables should be passed by reference in /in/R54o3 on line 14
int(1)
bool(true)
Array demonstration:
Strict Standards: Only variables should be passed by reference in /in/R54o3 on line 26
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/R54o3 on line 14
int(1)
Strict Standards: Only variables should be passed by reference in /in/R54o3 on line 15
int(1)
Array demonstration:
Strict Standards: Only variables should be passed by reference in /in/R54o3 on line 26
Array
(
[0] => c
)
Strict Standards: Only variables should be passed by reference in /in/R54o3 on line 27
Array
(
[0] => c
)
Output for 5.1.0
Fatal error: fatal flex scanner internal error--end of buffer missed in /in/R54o3 on line 28
Process exited with code 255.