【问题标题】:PHP Class variables with Constants带有常量的 PHP 类变量
【发布时间】: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 感谢您的澄清,我会考虑到这一点。

标签: php class constants class-constants


【解决方案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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-03
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 2014-03-18
      • 1970-01-01
      • 2015-08-18
      相关资源
      最近更新 更多