PHP引用当前数组/最佳方式来设置默认选项?

时间:2018-03-18 13:47:24

标签: php php-7

通过数组设置某些函数/对象的默认值的最佳方法是什么?

例如:

$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 +
  • 一种更好的方法来添加这些默认值,从服务器资源的角度来看,主要是程序员的观点

1 个答案:

答案 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]