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