交换两个函数执行顺序的简写

时间:2016-01-23 16:52:58

标签: php syntax logic

我正在寻找一种在Php中编写以下逻辑的缩写方式:

if condition do
   function b
   function a
else do
   function a
   function b

或者更确切地说,是一种交换执行a和b函数的顺序的简单方法。

这是我到目前为止所提出的:

!$swap && a(); // Where $swap is a boolean
b();
$swap && a();

用例可能正在改变显示输出的渲染顺序,例如HTML

5 个答案:

答案 0 :(得分:0)

如果这是Code Golf的问题,我会尝试使用以下解决方案之一:

$f = $condition ? ['a', 'b'] : ['b', 'a'];
$f[0]();
$f[1]();

$f = ['a', 'b'];
$f[$condition]();
$f[!$condition]();

Demo

但是在正常的PHP脚本中没有正当理由这样做。

答案 1 :(得分:0)

如果要以相反的顺序执行它们,可以将函数名称添加到数组中,然后反转数组。如下所示:

$functions = ['a', 'b'];
$reverse = TRUE;

if( $reverse )
{
    $functions = array_reverse( $functions );
}

$functions[0]();
$functions[1]();

答案 2 :(得分:0)

这是一个太聪明的好例子。你的第一个例子看起来很棒!

请记住,您的代码应该由其他人(或者您自己,几周后)阅读,并且复制一些代码以提高可读性几乎总是值得的。

答案 3 :(得分:0)

您可以使用包含两次迭代的循环来完成此操作。使用if / else包含每个函数作为循环内的语句调用。标志确定要运行的函数。在一次迭代之后,标志被切换,因此下一次运行另一个函数时:

function a() {
    echo 'a';
}

function b() {
    echo 'b';
}

function c($flip = false) {

    for($i=0; $i<2; $i++) {
        if(! $flip) {
            a();
        } else {
            b();
        }
        $flip = ! $flip; // On next run the other statement will run
    }

}

c($flip = false);
c($flip = true);

// Outputs: abba

或使用三元运算符:

function d($flip = false) {

    for($i=0; $i<2; $i++, $flip=!$flip) {
        !$flip ? a() : b();
    }

}

在html视图中:

<?php for($i=0; $i<2; $i++) { if(! $flip) { // Change the block display order if flip is true. ?>

    <h2>Block Foo</h2>
    <p>...</p> 

<?php } else { ?>

    <h2>Block Bar</h2>
    <p>...</p>

<?php } $flip = !$flip; } ?>

上下文是我写了一个CMS模块,并希望最终用户有一个简单的选项来改变html的顺序,而不需要覆盖模板。我希望有人觉得这很有用。

答案 4 :(得分:-1)

您可以将它放在三元运算符中。 condition ? When true : when false;。如果您有多行代码,则可能必须将true和false时放入函数中。