我有一个具有以下架构的类
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)
所以不行.你可以把它们变成私人变种.
不能。类常量(以及用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在您的示例中使用,可能会假设您尝试在实例级别设置常量,但是类常量始终在类级别静态定义。