在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
显然,这只有在您不需要函数的返回值时才有效。
免责声明:我不建议在生产代码中使用它,但这是一个有趣的思想实验