以下代码不起作用:
class MyClass
{
const myconst = 'somevalue';
private $myvar = array( 0 => 'do something with '.self::myconst );
}
似乎类常量在“编译时”不可用,但仅在运行时。 有谁知道任何解决方法? (定义不起作用)
由于
答案 0 :(得分:12)
类声明中的问题不是你使用的是常量,而是你正在使用表达式。
类成员变量称为“属性”。 (...)它们通过使用public,protected或private之一,然后是普通变量声明来定义。这个声明可能包括初始化,但是这个初始化必须是一个常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能成为评估。
例如,这个简单的声明不会编译(解析错误):
class MyClass{
private $myvar = 3+2;
}
但是如果我们改变你的类声明来使用简单常量,而不是与该常量连接的字符串,它将按预期工作。
class MyClass{
const myconst = 'somevalue';
public $myvar = array( 0 => self::myconst );
}
$obj = new MyClass();
echo $obj->myvar[0];
作为解决方法,您可以在构造函数中初始化属性:
class MyClass{
const myconst = 'somevalue';
public $myvar;
public function __construct(){
$this->myvar = array( 0 => 'do something with '.self::myconst );
}
}
$obj = new MyClass();
echo $obj->myvar[0];
我希望这可以帮助你,
阿林
答案 1 :(得分:0)
请注意,对于 PHP 5.6及以上版本,可以这样做。
请参阅https://secure.php.net/manual/en/migration56.new-features.php:
现在可以提供一个标量表达式,其中涉及PHP以前期望静态值的上下文中的数字和字符串文字和/或常量,例如常量和属性声明以及默认函数参数。