如何在PHP中编写速记设置器?

时间:2012-01-22 18:50:17

标签: php shortcuts

我很好奇有没有办法在PHP中编写速记设置器。编写代码时我的主要任务是使其尽可能紧密,我认为以下内容很麻烦:

$value = "Which array do I go in?";
if(true)
    $arr_1[] = $value;
else
    $arr_2[] = $value;

有更好的方式来写吗?我尝试使用速记如果:

(true)?$arr_1[]:$arr_2[] = "Which array do I go in?";

但这似乎不起作用。对于这种情况,任何人都有任何很酷的技巧吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

您尝试做的事情没有简写。此外,您应该意识到使代码“尽可能紧密”通常会以可读性为代价。

编辑:有一些丑陋的黑客可以做你想要的,但我强烈建议反对。 E.g:

$GLOBALS[cond ? 'varname1' : 'varname2'] = $value;

答案 1 :(得分:3)

另一个黑客将是:

$arr = ($cond ? &$arr_1 : &$arr_2);
$arr[] = 'Which array do I go in';

它是两行,但它不需要全局,并且可以在函数中工作。但是为了便于阅读,最好使用if语句。 (注意:&正在引用变量,这就是为什么这样做的原因)。另一个(可能会让你理解三元运算符如何工作)将是:

$cond ? $arr_1[] = $value : $arr_2[] = $value;

您会看到三元运算符仅评估(运行代码路径)成功评估(如果为true,则在右侧:如果为false)。但是,如果您认为这比使用'if'更快,那么您的错误就会更少'紧密'代码实际执行better

答案 2 :(得分:1)

另一种选择(例如,如果你不能/不想使用全局变量)。

${$cond?'arr_1':'arr_2'}[] = $value;