0

我正在寻找一种允许我这样做的单行 PHP 语法:

function printMsg($do_print, $msg) {
    if ($do_print) {
        echo "$msg\n";
    }
    return $do_print;
}

function test() {
    printMsg(false, 'foo') and return;   <== need a one liner for this
    printMsg(true, 'bar') and return;
}

echo "before"; // before
test();        // bar
echo "after";  // after

到目前为止,我最好的办法是:

if (printMsg(false, 'foo')) return;

问题是,在重新格式化我的代码时,我的 IDE ( NetBeans ) 将它放在两行上。这并不引人注目,但我有一段代码有很多这样的调用,并且有一个保持在一行的单行代码会使其更加简洁/可读。

对于我想要实现的目标,PHP 中是否还有其他可能的单行语法?

4

2 回答 2

1

你可以试试

function printMsg($msg, $print = false) {
    $print and print("$msg\n");
    return $print;
}

function test($r = null) {
    printMsg('foo') and $r = false;
    printMsg('bar', true) and $r = true;
    return $r;
}

echo "<pre>";
echo "before\n"; // before
test(); // bar
echo "after\n"; // after

输出

before
bar
after
于 2012-10-18T20:57:42.457 回答
0

如果我正确阅读了您的问题,您应该可以通过以下方式完成此操作:

function test() {
    printMsg(false, 'foo') || printMsg(true, 'bar');
}

在这里,如果第一个printMsg()返回 true,printMsg()则不会执行第二个。如果它返回 false,printMsg()则将执行第二个。

例子:

printMsg(false, 'foo') || printMsg(true, 'bar'); // bar
printMsg(true, 'foo') || printMsg(true, 'bar'); // foo
printMsg(false, 'foo') || printMsg(false, 'bar') || printMsg(true, 'ok'); // ok

但是,空格不会花费任何成本,并且此代码远非可读。六个月后,您将不得不考虑片刻才能弄清楚它的作用,而任何追随您的人乍一看都不太可能理解它。

我强烈建议您将代码分成几行,然后只使用一个if语句。

于 2012-10-18T21:14:02.137 回答