【发布时间】:2018-08-27 03:56:57
【问题描述】:
通过数组为某些函数/对象设置默认值的最佳方法是什么?
例如:
$cl = new Obj([
'a' => Conf::get('a'),
'b' => Conf::get('b'),
'c' => Conf::get('a') + Conf::get('b'),
'd' => 'extra',
]);
问题是,Conf::get('a') + Conf::get('b') 有时是一个很长的字符串,即:
- 查看代码时看起来很糟糕
- 必须做一些处理,有时是繁重的处理
我试图避免:
$defaults = [
'a' => Conf::get('a'),
'b' => Conf::get('b'),
'c' => null,
'd' => 'extra',
];
$defaults['c'] = $defaults['a'] + $defaults['b'];
$cl = new Obj($defaults);
所以,我正在寻找类似的东西:
$cl = new Obj([
'a' => Conf::get('a'),
'b' => Conf::get('b'),
'c' => { this->a + this->b }, # << replace this somehow
'd' => 'extra',
]);
- Conf::get('a') 和 Conf::get('b') 只被调用一次
我目前有(但不理想):
$cl = new Obj(Util:defaults([
'a' => Conf::get('a'),
'b' => Conf::get('b'),
':c' => '[./a] + [./b]',
'd' => 'extra',
]));
Util:defaults 设置一个数组,然后再次循环遍历它以查找那些标签,并使用类似 xpath 的表达式填充以 : 开头的字段和一个 eval。
- 有时比调用这些函数要快得多
- 在大多数情况下,它通常会比较慢(如果不需要,则无需执行循环)
- 如果我将其作为标准并在任何地方使用它,那就太矫枉过正了...
我可以在以下方面使用您的意见:
- 引用当前声明数组的方式,如果可能的话在 php7+ 中
- 从服务器资源的角度,主要是程序员的角度,添加这些默认值的更好方法
【问题讨论】:
-
请仅使用相关标签标记您的问题 - 谢谢!