【问题标题】:PHP Reference the current array / best way to set default options?PHP 参考当前数组/设置默认选项的最佳方式?
【发布时间】: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+ 中
  • 从服务器资源的角度,主要是程序员的角度,添加这些默认值的更好方法

【问题讨论】:

  • 请仅使用相关标签标记您的问题 - 谢谢!

标签: php php-7


【解决方案1】:

这个怎么样?

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]

【讨论】:

    猜你喜欢
    • 2012-08-10
    • 2019-12-19
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多