2012-10-18 40 views
0

我要尋找一個班輪PHP語法,讓我做到這一點:做點什麼,回報或繼續,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中是否還有其他單行語法?

+0

讓我們來討論你的meta問題!你不存在某個命令必須停留在一行的問題。你更可能會遇到如何表達你真正想做的事情的問題 - 而這正是我目前的陳述所不能理解的。我喜歡'WTF,如果你知道你不想輸出和返回,那麼不要在'test()'函數的第一行調用任何東西。' – Sven

+2

所以基本上你想要'return(2)'這樣的東西在調用堆棧上返回2個層次,而不是通常的1? –

+0

就是這樣。我完全沒有意識到我可以做到這一點,所以我想出了這種單線的選擇。 – Max

回答

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 
+0

也許我沒有正確解釋,但如果需要的話,我應該能夠繼續在函數內部執行。在我的例子中,如果我設置了'printMsg(false,'bar')',它會繼續執行'test()'中的內容(在示例中沒有任何內容)。在你提供的代碼中,即使我做了'printMsg('bar',false)',我將退出函數。 – Max

+0

好的..現在我明白了....看到更新的代碼..這是你的意思 – Baba

0

如果我正確地讀你的問題,你應該能夠做到這一點:

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

這裏,如果第一個printMsg()返回true,則第二個printMsg()將不會被exe cuted。如果它返回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語句。