通过数组设置某些函数/对象的默认值的最佳方法是什么?
例如:
$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',
]);
我目前有(但不理想):
$cl = new Obj(Util:defaults([
'a' => Conf::get('a'),
'b' => Conf::get('b'),
':c' => '[./a] + [./b]',
'd' => 'extra',
]));
其中Util:defaults设置一个数组,然后再次循环查找这些标记,并使用类似xpath的表达式填充以:开头的字段和 eval 。
我可以用你的意见:
答案 0 :(得分:0)
这个怎么样?
function getA() { return 5; }
function getB() { return 3; }
$x = [
'a' => $a = getA(),
'b' => $b = getB(),
'c' => $a + $b
];
var_dump($x); // ['a' => 5, 'b' => 3, 'c' => 8]