推 flamerecca:用echo大法檢查吧 看看你實際到底比較了哪兩個數字 01/10 14:40
→ vivi50218:值是對的阿.. echo 出來是1 跟 4 .... 01/10 14:50
→ richile0819:應該用&&罷 01/11 10:44
推 bobju:你若對運算符的優先順序不確定,最好還是用小括號 01/12 11:44
> -------------------------------------------------------------------------- <
作者: gpmm (銀色) 看板: PHP
標題: Re: [請益] 關於PHP 邏輯運算 (and,or)
時間: Thu Jan 10 14:44:32 2013
※ 引述《vivi50218 (vivi)》之銘言:
: 我現在 再做權限設定的部分 參考網路上的做法是用 邏輯運算去做
: 就是 有查 新 修 刪 4個權限 分別對映到 1 2 4 8
: 如果只有查 就是存1 有查跟新 就是1+2=3 以此類推...
: $c=4
: 作檢查的時候就用 if($_SESSION["auth"]&$c==4) 去做檢查
: 如果Session=1 作出來的結果應該是0才對 而不是4 但我作出來卻是4...
: 運算出來的結果都不對 難道不能這樣作嗎? 我都是用10進位
: 我之前作checkbox也是用這個方法 但是那時都是正確的 作權限檢查就給我出錯..
: 實在想不出來錯在哪裡....只好上來發問 請大家幫幫忙...
: 0100
: and 0001
: __________
: 0000
// 定義權限
define ('_SELECT', 0x001);
define ('_INSERT', 0x002);
define ('_UPDATE', 0x004);
define ('_DELETE', 0x008);
// 使用者持有的權限
$userAuth = _SELECT | _INSERT | _UPDATE | _DELETE;
// 權限判定
if ($userAuth & _SELECT) {
}
if ($userAuth & _INSERT) {
}
--
列出我平常用的方式,你參考看看
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 175.180.111.33
推 PTTLSboy:請問一下0x001裡的x代表什麼呢?? 01/13 02:18
→ gpmm:0x 代表這是 16 進位 :P 01/13 22:10
> -------------------------------------------------------------------------- <
作者: flamerecca (werewolf) 看板: PHP
標題: Re: [請益] 關於PHP 邏輯運算 (and,or)
時間: Thu Jan 10 14:50:08 2013
※ 引述《gpmm (銀色)》之銘言:
: // 定義權限
: define ('_SELECT', 0x001);
: define ('_INSERT', 0x002);
: define ('_UPDATE', 0x004);
: define ('_DELETE', 0x008);
: // 使用者持有的權限
: $userAuth = _SELECT | _INSERT | _UPDATE | _DELETE;
: // 權限判定
: if ($userAuth & _SELECT) {
: }
: if ($userAuth & _INSERT) {
: }
這是比較正確的寫法
不過我嘗試他的寫法也沒錯說?
用 http://writecodeonline.com/php/ 試跑
==script==
$a = '1';
echo $a.'<br />';
$b = 4;
echo $b.'<br />';
$c = $a & $b;
echo $c.'<br />';
if($c){echo 'aaa'.'<br />';}
if($a&$c==4){echo 'bbb'.'<br />';}
==output==
1
4
0
應該是其他地方寫錯?
--
To iterate is human, to recurse is divine.
-- L. Peter Deutsch
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.36.235.231
推 gpmm:有可能,我懶得測 code XD 推一個 f 大超用心 01/10 14:52
→ vivi50218:其他地方沒錯阿 我是把判斷寫在最前面 這個方法是一定可 01/10 14:52
→ vivi50218:以 因為我已經這樣作很久了... 但是就是不知道 為什麼 01/10 14:52
→ vivi50218:突然間出錯了.... 01/10 14:52
> -------------------------------------------------------------------------- <
作者: gpmm (銀色) 看板: PHP
標題: Re: [請益] 關於PHP 邏輯運算 (and,or)
時間: Thu Jan 10 14:53:11 2013
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 211.20.201.205
: ※ 編輯: vivi50218 來自: 211.20.201.205 (01/10 14:36)
: ※ 編輯: vivi50218 來自: 211.20.201.205 (01/10 14:36)
: 推 flamerecca:用echo大法檢查吧 看看你實際到底比較了哪兩個數字 01/10 14:40
: → vivi50218:值是對的阿.. echo 出來是1 跟 4 .... 01/10 14:50
我猜是這個問題
if($_SESSION["auth"]&$c==4)
if(($_SESSION["auth"]&$c)==4)
你試試看
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 175.180.111.33
推 flamerecca:我弄出來了 超級有趣XD 01/10 14:56
推 vivi50218:解決了 ...真的是這樣 看來我功力還太淺= = 感謝 01/10 14:56
→ vivi50218:給你一個讚 01/10 14:56
→ gpmm:腦袋閃過…亂猜猜到了 XDD 01/10 14:57
推 flamerecca:以後不要這樣節省code~ 會有奇怪的bug出現 01/10 14:59
→ vivi50218:但這也太詭異了吧 我之前從資料庫抓值 用$row["xxx"] 01/10 14:59
→ vivi50218:不用加括號也是對的.. 01/10 15:00
→ jaceju:嗚,底下 gpmm 有回應了,我多回 = = 01/15 14:49
> -------------------------------------------------------------------------- <
作者: vivi50218 (vivi) 看板: PHP
標題: Re: [請益] 關於PHP 邏輯運算 (and,or)
時間: Thu Jan 10 15:16:50 2013
另外我還想問個問題
就是為什麼不能這樣用呢
$a = 1;
$b = 4;
if($a&4==0) 這個是不成立的
if($a&$b==0) 成立
但$c=$a&4; 出來的結果是$c=0
if裡面不能直接用數字 只能用變數 意思不一樣嗎?..
這問題我很早就發現了..但我後來改用變數解決就沒去管他 剛好趁個機會問一問...
+-*/ 卻是可以直接加數字
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.20.201.205
※ 編輯: vivi50218 來自: 211.20.201.205 (01/10 15:19)
> -------------------------------------------------------------------------- <
作者: flamerecca (werewolf) 看板: PHP
標題: Re: [請益] 關於PHP 邏輯運算 (and,or)
時間: Thu Jan 10 15:49:39 2013
※ 引述《vivi50218 (vivi)》之銘言:
: 另外我還想問個問題
: 就是為什麼不能這樣用呢
: $a = 1;
: $b = 4;
: if($a&4==0) 這個是不成立的
: if($a&$b==0) 成立
: 但$c=$a&4; 出來的結果是$c=0
: if裡面不能直接用數字 只能用變數 意思不一樣嗎?..
: 這問題我很早就發現了..但我後來改用變數解決就沒去管他 剛好趁個機會問一問...
: +-*/ 卻是可以直接加數字
應該是電腦解讀你這段程式順序的問題
加上括弧之前 電腦是這樣解讀的:
if($a&(4==0)) 所以不成立
===
個人意見是不要寫這種程式
好好的分開寫就好XD
用g板有的寫法不是很乾淨嗎XD
--
卍~卍~卍~卍~卍~卍~ 嘉察仁波切《聽即解脫咒》 ~卍~卍~卍~卍~卍~卍
★Ah Ah Sha Sa Ma Ha ★阿 阿 夏 沙 嘛 哈
★Ma Ben Dharma Ra Ra ★嘛 北 當 嘛 RA RA
★Ha Gan Ga Ah Sha La ★哈 港 嘎 阿 夏 拉
★Sa Den Dharma Da Li ★沙 殿 當 嘛 達 哩
★Ga Ha Na Ah Li Ta ★嘎 哈 哪 阿 哩 答
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.36.235.231
> -------------------------------------------------------------------------- <
作者: gpmm (銀色) 看板: PHP
標題: Re: [請益] 關於PHP 邏輯運算 (and,or)
時間: Thu Jan 10 16:44:40 2013
※ 引述《vivi50218 (vivi)》之銘言:
: 另外我還想問個問題
: 就是為什麼不能這樣用呢
: $a = 1;
: $b = 4;
: if($a&4==0) 這個是不成立的
: if($a&$b==0) 成立
: 但$c=$a&4; 出來的結果是$c=0
: if裡面不能直接用數字 只能用變數 意思不一樣嗎?..
: 這問題我很早就發現了..但我後來改用變數解決就沒去管他 剛好趁個機會問一問...
: +-*/ 卻是可以直接加數字
我不確定你指出的部份是有哪些因素影響造成(其實是我懶的仔細看… orz)
但是你可以參考以下這份官方說明
http://php.net/manual/en/language.operators.precedence.php
這裡有所有 operator 的優先順序,
另外,我覺得陳述句盡可能寫的清楚明瞭,該加括弧就加,
除了避免解讀錯誤外,同時更能降低讀 code(無論是自己或其他人)的辨識負擔。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 175.180.111.33
※ 編輯: gpmm 來自: 175.180.111.33 (01/11 11:06)