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

时间:2010-11-28 14:29:55

标签: php oop class properties const

以下代码不起作用:

class MyClass
{
    const myconst = 'somevalue';

    private $myvar = array( 0 => 'do something with '.self::myconst );
}

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

由于

2 个答案:

答案 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以前期望静态值的上下文中的数字和字符串文字和/或常量,例如常量和属性声明以及默认函数参数。