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)がコードを2行に配置することです。劇的ではありませんが、私はこのような多くの呼び出しを含むコードを持っています。1行に留まるワンライナーを使用すると、はるかに簡潔で読みやすくなります。

私が達成しようとしていることについて、PHPで可能な他の1行の構文はありますか?

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を返す場合、2番目printMsg()は実行されません。falseが返された場合、2番目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

ただし、空白には何の費用もかからず、このコードは読みにくいものです。6か月以内に、それが何をするのかを理解するために少し考えなければならず、あなたの後に来る人は一見それを理解する可能性が低いでしょう。

コードを数行に分割し、ifステートメントを使用することを強くお勧めします。

于 2012-10-18T21:14:02.137 に答える