Php 用于交换两个函数的执行顺序的缩写

Php 用于交换两个函数的执行顺序的缩写,php,syntax,logic,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(); 一个用例可能是更改显示输出的呈现顺序,例如ht

我正在寻找一种用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。

如果这是一个代码问题,我将尝试以下解决方案之一:

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


但是在一个普通的php脚本中,没有一个有效的理由这样做。

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

您可以将函数名添加到数组中,如果希望以相反的顺序执行,则可以反转数组。如下图所示:

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

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

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

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


请记住,您的代码应该在几周后由他人或您自己阅读,复制一点代码以提高可读性几乎总是值得的。

您可以通过包含两次迭代的循环来完成这一点。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的顺序,而不重写模板。我希望有人会觉得这很有用。

我不认为有一个短得多的版本,我认为这是因为没有真正的需要一个短得多的版本。我做了一点手脚,在我的实际问题中,有一点代码比仅仅按顺序运行这两个函数要多。因此,我有更多的代码重复。@Progrock如果您过于简化了示例,我们将不会回答您想要知道答案的实际问题。“我们将回答你在这里写的问题。”菲利法格兰德,我同意。我认为再把这个问题具体化会破坏它的简洁性。我认为现实生活中的代码很少这么简单。如果是,我很可能会写简单的If;否则,至少它是明确的。这很有趣。我认为演示计算器不喜欢缩写数组语法。如果您不想使用缩写语法来声明数组,可以使用$f=array'a',b';也
<?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; } ?>