I upgraded my PHP version on a server from 7.0 to latest 7.1.9 and got
this strange behaviour, did something changed on the core language or is
this a bug?
PHP sample code:
<?php
function test()
{
static $staticValue = test2();
return $staticValue;
}
function test2()
{
return array();
}
print_r(test());
Output:
PHP Fatal error: Constant expression contains invalid operations in
test.php on line 5
Fatal error: Constant expression contains invalid operations in test.php
on line 5
From doc: http://php.net/manual/en/language.variables.scope.php
Note: Static variables may be declared as seen in the examples above.
From PHP 5.6 you can assign values to these variables which are the result
of expressions, but you can't use any function here, what will cause a
parse error.
2017-09-03 21:27 GMT-03:00 Jefferson Gonzalez jgmdev@gmail.com:
I upgraded my PHP version on a server from 7.0 to latest 7.1.9 and got
this strange behaviour, did something changed on the core language or is
this a bug?PHP sample code:
<?php
function test()
{
static $staticValue = test2();return $staticValue;
}function test2()
{
return array();
}print_r(test());
Output:
PHP Fatal error: Constant expression contains invalid operations in
test.php on line 5Fatal error: Constant expression contains invalid operations in test.php
on line 5--
--
David Rodrigues
From doc: http://php.net/manual/en/language.variables.scope.php
Note: Static variables may be declared as seen in the examples above.
From PHP 5.6 you can assign values to these variables which are the result
of expressions, but you can't use any function here, what will cause a
parse error.
Ahh, thanks a lot, I missed that one... I guess this change is to
optimize the performance of PHP somehow. Now I will have to make a
search on my code base to see where I'm using more functions that use
static variables to store the return value of a function (to speed stuff
up) and change it on a way that is compatible...
static $var = array();
if(empty($var))
{
$var = function_output();
}
I upgraded my PHP version on a server from 7.0 to latest 7.1.9 and got
this strange behaviour, did something changed on the core language or
is
this a bug?PHP sample code:
<?php
function test()
{
static $staticValue = test2();return $staticValue;
}function test2()
{
return array();
}print_r(test());
According to 3v4l.org this has never been valid: https://3v4l.org/vRaNK The error message changed between 5.x and 7.x, but if you're already on 7.0 you shouldn't have seen any change.
Are you sure this test case correctly represents the code you're having problems with?
Regards,
--
Rowan Collins
[IMSoP]