PHP Error : Fatal error: Constant expression contains invalid operations
I am getting an error:
Fatal error: Constant expression contains invalid operations in config.php on line 214
That line was:
protected static $dbname = 'mydb_'.$appdata['id'];
Whether I did any mistakes in quotes? Or somewhere else?
My search for the error message only showed a different source cause (a dynamic default value in a function definition).
From the official Php documentation :
Like any other PHP static variable, static properties may only be initialized using a literal or constant before PHP 5.6; expressions are not allowed. In PHP 5.6 and later, the same rules apply as const expressions: some limited expressions are possible, provided they can be evaluated at compile time.
So you cannot initialize a static variable with another variable. Replace $appdata['id']
with a constant string or remove the static
attribute.
This is because all static declarations are resolved in compile-time, when the content of other variables is not known (see this other page of official doc).
Unless you mess with reflection, the only way I can think of to have a static private/protected class property with a dynamically generated value is to calculate it outside the class:
class Foo {
protected static $dbname = DBNAME;
public static function debug() {
return Foo::$dbname;
}
}
$appdata = array(
'id' => 31416,
);
define('DBNAME', 'mydb_'.$appdata['id']);
var_dump(Foo::debug());
In your precise use case, however, it's possible that there's simply no good reason for the property to be static. In that case, it's as straightforward as using the constructor:
class Foo {
protected $dbname;
public function __construct($appdata){
$this->dbname = 'mydb_'.$appdata['id'];
}
public function debug() {
return $this->dbname;
}
}
$appdata = array(
'id' => 31416,
);
$foo = new Foo($appdata);
var_dump($foo->debug());