PHP if/else 会速记多个执行


PHP if/else shorthand multiple executions

在Javascript中,我们可以通过以下代码来做到这一点:

function test(a) { 
  a && (console.log("somthing"), executeOtherFunction()); 
}

上面的代码是以下代码的简写:

function test(a){
  if(a){
    console.log("something");
    executeOtherFunction()
  }
}

有可能让它为 PHP 工作吗?

我不是说在PHP中使用console.log,只是想在PHP中使用同样的东西。

看起来这在 PHP 中有效。

function test(a) { 
  a && (console_log("somthing") xor executeOtherFunction()); 
}

我认为PHP能够将所有内容转换为布尔值而不会出错。

在PHP中,条件评估中也存在短路。对于AND(或&&),一旦遇到false值,评估将立即停止。

但是,PHP 不支持逗号,运算符。因此,您不能通过用,分隔两个表达式来执行它们。它只允许作为语法糖在 for 循环中:

for ($a = 2, $b = 4; $a < 3; $a++)
           ^

这种结构也经常与or关键字一起使用:

someAction() or log("someAction() execution failed");

仅当 someAction() 返回 false 时,才会记录错误。

正如 Guillaume Poussel 所说,PHP 知道条件评估中的短路,但不知道通过 , 链接代码块。

如果你愿意真正滥用PHP的弱类型系统,你可以使用这样的东西:

if ($a && function1() . function2() ) ;
                      ^ concatenate the results of the functions as strings

显然,这只有在您不需要函数的返回值时才有效。

免责声明:我不建议在生产代码中使用它,但这是一个有趣的思想实验