所以我的問題是關于 php 在 or 語句采用兩個函數的情況下的行為。當第一個函數的計算結果為 true 時,第二個函數是否仍有可能被執行?我希望下面的代碼可以澄清我的意思:$dbh->startTransaction();$stmt = $dbh->prepare("DELETE FROM foo WHERE id=:id");$stmt->bindParam(':id', $id, PDO::PARAM_INT);if (!$stmt->execute() || !bar($id)) { $dbh->rollBack();}我想確定的是,執行失敗時永遠不會調用bar()它。$stmt我知道在某些語言中 or 語句會在評估為 true 時返回 true !$stmt->execute(),并且我可以確定除非bar()評估!$stmt->execute()為 false(意味著$stmt->execute()評估為 true 并且查詢成功),否則不會調用該語句。我在 php 中是否有這種確定性,或者服務器是否有可能同時或以相反的順序進行評估$stmt->execute(),bar($id)并以這種方式對我的數據庫造成嚴重破壞?我假設我也能夠將我在這里得到的任何答案應用到 and 聲明中。如果情況并非如此,請告訴我。
1 回答

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
邏輯運算符||
意味著如果第一個表達式的計算結果為 true,則不會執行第二個表達式。如果您使用or
,|
則即使第一個表達式的計算結果為 true,也會計算第二個表達式。
if?($expression?||?$expression)?{ ????// ????}
在這里,如果第一個表達式的計算結果為 true,則不||
會讓第二個表達式計算并且流程在if
塊中繼續。僅當第一個表達式變為 時才計算第二個表達式false
。
這個布爾運算與主要編程語言中的解釋完全一樣,而不僅僅是在 php 中。如果您想深入了解,請訪問php Doc 中的邏輯運算符。
根據優先規則,邏輯運算符||
具有左關聯性,規定左表達式始終首先計算,如果左表達式失敗,則將計算右表達式。
- 1 回答
- 0 關注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消