带有常量的 PHP 类变量

Posted

技术标签:

【中文标题】带有常量的 PHP 类变量【英文标题】:PHP Class variables with Constants 【发布时间】:2011-04-25 08:31:20 【问题描述】:

我在带有常量 (DEPLOYMENT) 的行上遇到解析错误。为什么现在允许这样做,或者我错过了什么。

解析错误:解析错误,期待 `')'' in

class UploadComponent extends Object 

    private $config = array(
        'accessKey' => 'XXXX',
        'secretKey' => 'XXXX',

        'images' => array(
            'bucket' => DEPLOYMENT.'-files/images',
            'dns' => false
        ),

        'files' => array(
            'bucket' => DEPLOYMENT.'-files/files',
            'dns' => false
        ),

        'assets' => array(
            'bucket' => DEPLOYMENT.'-files/assets',
            'dns' => false
        )
    );
    ....

【问题讨论】:

(sidenote) 无论如何,你都不希望对全局常量有依赖。 你在哪里定义“部署”? @Gordon 为什么不呢? @pleasedontbelong 真的吗?你的评论有什么意义。 因为应该注入依赖项。如果你依赖外部状态,你的类就不能再孤立地使用。如果没有全局常量,就不能拥有此类。这对维护和测试不利。 @Gordan 感谢您的澄清,我会考虑到这一点。 【参考方案1】:

定义类变量时不能使用变量。而是在构造函数中初始化你的数组:

class UploadComponent extends Object 

    private $config;

    function __construct() 
        $this->config = array(
            'accessKey' => 'XXXX',
            'secretKey' => 'XXXX',

            'images' => array(
                'bucket' => DEPLOYMENT.'-files/images',
                'dns' => false
            ),

            'files' => array(
                'bucket' => DEPLOYMENT.'-files/files',
                'dns' => false
            ),

            'assets' => array(
                'bucket' => DEPLOYMENT.'-files/assets',
                'dns' => false
            )
        );
    

【讨论】:

【参考方案2】:

原因是“常量”可以动态定义。因此它们的内容仅在运行时才知道,而不是在编译时。

【讨论】:

以上是关于带有常量的 PHP 类变量的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用常量名称的变量访问 PHP 类常量吗?

精进不休 php - 数据类型变量常量函数类接口特性

PHP的类中的常量,静态变量的问题。

PHP常见概念混淆之PHP类常量静态属性和属性的区别

php----------const 定义的常量和define()定义的常量的区别?

相同类不同类调用变量常量及方法