如何在PHP中的类属性中使用类常量?

Ant*_*ine 9 php oop const properties class

这是不起作用的代码:

class MyClass
{
    const myconst = 'somevalue';

    private $myvar = array( 0 => 'do something with '.self::myconst );
}
Run Code Online (Sandbox Code Playgroud)

似乎类常量在"编译时"不可用,但仅在运行时.有谁知道任何解决方法?(定义不起作用)

谢谢

Ali*_*aru 12

类声明中的问题不是您使用常量,而是使用表达式.

类成员变量称为"属性".(...)它们通过使用public,protected或private之一,然后是普通变量声明来定义.此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估.

例如,这个简单的声明将不会编译(解析错误):

class MyClass{
    private $myvar = 3+2;
}
Run Code Online (Sandbox Code Playgroud)

但是如果我们改变你的类声明来使用简单常量,而不是与该常量连接的字符串,它将按预期工作.

class MyClass{
    const myconst = 'somevalue';
    public $myvar = array( 0 => self::myconst );
}

$obj = new MyClass();
echo $obj->myvar[0];
Run Code Online (Sandbox Code Playgroud)

作为解决方法,您可以在构造函数中初始化属性:

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];
Run Code Online (Sandbox Code Playgroud)


艾琳,我希望这对你有所帮助