2010-01-26 75 views
4

我有一個條件語句肚裏正是如此:PHP條件邏輯,具體順序?

if ($_POST['password'] == $_POST['repeat'] && $_SESSION['type'] == "admin")

但是,讓我們說,我也想在條件評估真實的用戶類型爲「超級用戶」(而不是「管理」)。

這樣我就可以,例如寫:

if ($_POST['password'] == $_POST['repeat'] && $_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser")

不過,假設PHP讀取條件語句和公式從左邊到右邊,它則可能爲「超級用戶」擁有條件評估真實即使「密碼」和「重複」不相等,因爲我們將假想的括號放在「& &」旁邊的兩個操作數的右邊,對吧?

我可以添加括號來封裝「||」的兩個操作數,但我依稀記得,我可能已經嘗試過一些東西,並使其失敗壯觀。

有沒有更好的方法來做到這一點?是否括號實際上工作(從而得出結論,我的記憶是錯誤的?[內存泄漏?嘿。])

謝謝!

+0

一個解決方案增加基於提升的用戶權限... 但是,這是工作的公平位,我想...... – 2010-01-26 00:52:42

+0

抱歉,只有一半人在發佈答案時閱讀了你的問題。看起來你已經有了這個想法,但是我認爲我發佈的代碼是正確的; o) – conorgriffin 2010-01-26 00:56:32

回答

3

是的,括號會覆蓋&&優先於||的事實。

+0

爲快速響應而歡呼! – 2010-01-26 00:53:10

0

沒有測試過,但試試這個:

if ($_POST['password'] == $_POST['repeat'] && 
($_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser")) 
0

括在()和或「類型」管理員檢查檢查。超級用戶應該首先檢查最佳代碼。

($_SESSION['type'] == "superuser" || ($_POST['password'] == $_POST['repeat'] && $_SESSION['type'] == "admin")) 
0

爲了得到你想要的東西,你可以:

if (($_POST['password'] == $_POST['repeat']) && ($_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser")) 

當密碼匹配這將評估爲true,如果用戶類型爲管理員或超級用戶。

,或者更冗長:我想到的是重命名所有的用戶類型爲數字,

$valid_password= $_POST['password'] == $_POST['repeat']; 
$valid_user= $_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser"; 
if ($valid_password && $valid_user) 
// Do something