我明白你不能复制常量。我只是很困惑,为什么它不能工作与不同的对象。
在我的一个项目中,我使用它们将设置传递给我的对象。
下面是一个例子:
class someClass {
function __construct($config) {
define("PRIVATE_KEY", $config['private_key']);
}
}
下面是我创建对象
的方法$objectA = new someClass($config['A']);
$objectB = new someClass($config['B']); //ERROR!!
我得到错误:
常量PRIVATE_KEY已定义
大多数得到此错误的人都多次包含了相同的常数。
在我的例子中,它们被用在不同的对象中。我将添加一些检查以确保它们没有被重新定义。但我还是很想知道为什么会发生这种事。
不再使用时不处理/销毁对象?
是的,对象在某些时候会被销毁,但是define
声明是全局的,并且在未定义之前一直存在。你的代码两次定义了同一个常量
私有属性、静态属性或类常量更适合你尝试做的事情,因为它们被封装在对象中。
class someClass {
private $private_key;
// constructor
function __construct($config) {
$this->private_key = $config['private_key'];
}
}
使用PRIVATE_KEY做什么?它应该是实例变量吗?如果是这样,就不应该使用define(),因为它的作用域是全局的。你可以用$this->private_key = $config['private_key']