【发布时间】:2017-01-31 04:00:21
【问题描述】:
我有一个键值数据库表,其中存储了一些设置。
我想在 PHP 常量对象中包含这些设置,因为它们不应该是可编辑的。
在 PHP7 中我们现在可以这样做:
define('MySettings', array(
'title' => 'My title'
// etc
));
// And call it with
echo MySettings['title'];
而且效果很好。
但为什么我不能这样做:
define('MySettings', (object) array('title' => 'My title'));
所以我可以这样称呼它:
echo MySettings->title;
// or
echo MySettings::title;
这只是因为我认为将其输入为对象属性/常量($obj->key、$obj::key)比输入为数组($array['key'])更快、更漂亮
这是不可能的吗?
【问题讨论】:
-
因为从技术上讲,对象不可能是恒定的。它们可以包含代码,这意味着可以更改对象的内部结构,这意味着它们不是恒定的。这就是为什么你有常量 - 这是一个承诺/保证你塞进常量的东西永远不会改变。
-
目前正在讨论未来版本的 PHP 以支持不可变对象的提案。这将允许程序创建具有一组值的对象,并且一旦创建对象,这些值将是固定的并且不可更改。您可以在此处阅读更多信息:wiki.php.net/rfc/immutability。但是请注意,它现在不在 PHP (7.0) 中,也不会在即将发布的 7.1 版本中。根据讨论的进展情况,它可能会进入 7.2,但在现阶段对此做出任何承诺还为时过早。