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

时间:2014-08-14 20:35:04

标签: php constants

我知道你不能复制常数。我很困惑为什么它不适用于不同的对象。

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

以下是一个例子:

class someClass {

    function __construct($config) {
        define("PRIVATE_KEY", $config['private_key']);
    }
}

以下是我创建对象的方法

$objectA = new someClass($config['A']);
$objectB = new someClass($config['B']); //ERROR!!

我收到错误:

  

已定义常量PRIVATE_KEY

获得此错误的大多数人多次包含相同的常量。

在我的情况下,它们被用在单独的对象中。我会添加一些检查以确保它们没有被重新定义。但我仍然很想知道为什么会这样。

不再使用时是否处置/销毁对象?

2 个答案:

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