我有兩個函數a()
和b()
,兩者都返回一個布爾值。我知道邏輯表達式的求值只要知道結果就會停止,但是有沒有辦法對兩個或多個函數執行邏輯運算,使得兩個函數都能執行?執行邏輯運算中的所有功能
回答
根據this comment on the PHP manual
評估的邏輯表達式是隻要結果被稱爲停止。 如果你不想要這個,你可以用min()和or(或)運算符替換max和()。
所以這個代碼可能是你有幫助,你可以看到所有函數被調用在每種情況下,是的,你可以使用這個有兩個以上的功能: -
function a()
{
echo "function a<br/>\n";
return true;
}
function b()
{
echo "function b<br/>\n";
return false;
}
function c()
{
echo "function c<br/>\n";
return false;
}
echo min(a(), b(), c());
echo "<br/>";
echo max(a(), b(), c());
echo "<br/>";
輸出: -
function a
function b
function c
(false)
function a
function b
function c
(true)
你的意思是像下面這樣的東西?
var bothTrue;
if(a() && b()) {
bothTrue = true;
}
else {
bothTrue = false;
}
或者你是什麼意思,具體由「替代」?
這可以寫成一行'VAR bothTrue = A() && b();'爲了提高可讀性,同樣,這個答案並沒有提到所有似乎是這個問題的主要問題的懶惰操作。 –
如果要求兩個函數都應該執行,那麼用單個語句來保證這種行爲是不可能的。起初,你可能會認爲可以使用連詞或分詞,但是這兩種構造都是懶惰這意味着只要知道它們是真的(對於分離)或假(對於連接)它們就會停止評估, 。
function a() {
print("A");
return true;
}
function b() {
print("B");
return false;
}
$disjunction = a() || b(); // prints A, not B
$conjunction = b() && a(); // prints B, not A
上面的代碼將只輸出AB
,而不是ABBA
正如您所料。這是因爲當一個值爲真時,析取總是成立的,而當一個值爲假時,連接總是假。
加成
如果這種行爲確實需要的是某種原因,PHP功能,如map
,reduce
和filter
可以使用評估幾種陳述,並與一個布爾答案告終。雖然這會要求您創建額外的功能來支持評估(可以與create_function
函數一起使用),並且不會像使用多行那樣可讀,而且如果要實現這一點,則很難進行調試。
就是如此。所以除了在單獨的表達式中調用每一個函數,獲取它們的返回值然後進行析取之外別無他法。這真的很傷心 –
@BlaskPoranka,我已經添加了一些關於如何強制執行此行爲的附加說明,但除非由於某些動態構造或基於用戶輸入的評估而需要此行爲,否則我真的會反對。 –
是的,我在做'!array_filter(array(a(),b(),c()))',但我不喜歡它。請參閱@vascowhite回答這是非常優雅:) –
根據你所需要的,這可能是可能(以下@JakobPogulis的回答):
PHP:
function a() {
print("A");
return true;
}
function b() {
print("B");
return false;
}
var_dump((boolean)(intval(a()) | intval(b())));
var_dump((boolean)(intval(a()) & intval(b())));
的JavaScript:
function a()
{
console.log("A");
return true;
}
function b()
{
console.log("B");
return false;
}
console.log(Boolean(Number(a()) & Number(b())));
console.log(Boolean(Number(a()) | Number(b())));
- 1. 邏輯運算符的執行順序
- 2. JavaScript減少功能不運行邏輯
- 3. 邏輯運算
- 4. 2列的邏輯運算(邏輯或)
- 5. 邏輯&&運算符
- 6. 邏輯運算符
- 7. 邏輯運算符||
- 8. 邏輯運算符
- 9. 相對於邏輯運算的行
- 10. 秩序邏輯運算和結果的執行
- 11. 執行與邏輯運算符聲明的變量
- 12. 無法對未簽名的VHDL執行邏輯運算?
- 13. 如何在matlab中使用「菜單」功能執行邏輯功能?
- 14. OCaml的satisfable邏輯運算
- 15. perl的邏輯或運算
- 16. 如何有多個「和」邏輯運算符和「或」邏輯運算符
- 17. 不能執行邏輯的NSString *
- 18. 執行XSLT邏輯
- 19. 具有日期功能的邏輯
- 20. 具有邏輯功能的SQL GROUP BY
- 21. 執行邏輯不是!只用按位運算
- 22. 邏輯失敗成功運行後
- 23. 功能背後的邏輯
- 24. SSIS包在不執行邏輯的情況下成功執行
- 25. jQuery的所有事件執行功能
- 26. Python邏輯運算符
- 27. 結合邏輯運算符
- 28. Lua - 按位邏輯運算
- 29. AVR彙編邏輯運算
- 30. 邏輯運算符Objective-C
這是非常漂亮的解決方案! :) –