带有常量的 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 类变量的主要内容,如果未能解决你的问题,请参考以下文章