PHP使用常量实例化不同对象时的注意事项


PHP notice when instantiating different objects with constant

我明白你不能复制常量。我只是很困惑,为什么它不能工作与不同的对象。

在我的一个项目中,我使用它们将设置传递给我的对象。

下面是一个例子:

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']