在构造函数之后设置类常量?

Cli*_*ote 11 php oop class

我有一个具有以下架构的类

class MyClass
{
   const x = 'abc';
   const y = '123';

   function _contruct() {}
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让我在类体中保持常量未设置,并在调用构造函数后动态设置?像这样的事情:

class MyClass
{
   const x;
   const y;

   function _contruct()
   {
      $this->setStuff();
   }

   function setStuff()
   {
     $this->x = Config::getX();
     $this->y = Config::getY();
   }
}
Run Code Online (Sandbox Code Playgroud)

Ger*_*obs 11

顾名思义,该值在脚本执行期间不会改变(魔术常量除外,它们实际上不是常量)(http://php.net/manual/en/language.constants.php)

所以不行.你可以把它们变成私人变种.


Ste*_*rig 7

不能。类常量(以及用const关键字定义的全局或命名空间常量)必须是文字值,并且必须在运行时之前进行设置。那就是它们不同于define()运行时设置的老式常量的地方。const在脚本执行期间无法更改或设置常量。

该值必须是一个常量表达式,而不是(例如)变量,属性,数学运算结果或函数调用。

从PHP手册:类常量

因此这是可能的:

define('MY_CONST', someFunctionThatReturnsAValue());
Run Code Online (Sandbox Code Playgroud)

但这不是:

const MY_CONST = someFunctionThatReturnsAValue();

// or

class MyClass {
    const MY_CONST = = someFunctionThatReturnsAValue();
}

// or

namespace MyNamespace;
const MY_CONST = someFunctionThatReturnsAValue();
Run Code Online (Sandbox Code Playgroud)

通过$this在您的示例中使用,可能会假设您尝试在实例级别设置常量,但是类常量始终在类级别静态定义。