我在手冊上看見的是
&&與$x && $y如果 $x 和 $y 都為 true,則返回 true。||或$x || $y如果 $x 和 $y 至少有一個為 true,則返回 true。
但是為什麼我常常看好多的php檔案 包括知名的開來源程式的 都是用的反的??
比如刪除某個資訊的條件判斷代碼 都是
是管理員 && 是發行者 這樣的格式?從手冊上來講 這樣的含義是 刪除資訊的條件既是管理員又是發行者
真搞不懂 怎麼回事 難道手冊上有誤?
回複討論(解決方案)
你怎麼知道你不是斷章取義了呢
邏輯運算子的 用法 手冊上沒什麼問題呢.
至於你舉得例子 你確定是你說的意思嗎?
你要舉例說你在哪裡看到了,粘帖代碼讓大家看一下
你要舉例說你在哪裡看到了,粘帖代碼讓大家看一下
比如知名開源論壇 discuz 的一個檔案
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {exit('Access Denied');}
很明顯 意思就是必須在discuz內部 並且還要在admin管理 頁面才能運行。
大家不信的話 可以在discuz 裡面看看相關的php檔案 大跌眼鏡
php不會有自訂運算子的功能吧
應該不會有反著用的~
又比如 我要判斷2個表單是否都填寫
if(empty($_POST['a']) || empty($_POST['b'])){
這樣才能是2個表單缺一不可,都則不能發布
用php手冊上的
if(empty($_POST['a']) && empty($_POST['b'])){
只要填寫1項 就發行就緒了
已親測!
對不起 上面掉了個括弧 呵呵 大家明白這個意思就行了
又比如 我要判斷2個表單是否都填寫
if(empty($_POST['a']) || empty($_POST['b'])){
這樣才能是2個表單缺一不可,都則不能發布
用php手冊上的
if(empty($_POST['a']) && empty($_POST['b'])){
只要填寫1項 就發行就緒了
已親測!
你下面的代碼都沒寫全,我們怎麼知道是不是反的?
況且你怎麼確定原來作者的思路不是這樣的?
if(empty($_POST['a']) || empty($_POST['b']))
表述的是只要 $_POST['a'] 和 $_POST['b'] 中有一個為空白(當然包括兩個都為空白)運算式就成立
if(empty($_POST['a']) && empty($_POST['b']))
表述的是有 $_POST['a'] 和 $_POST['b'] 兩個都為空白,運算式才成立
顯然兩者是不同的,雖然都有 兩個都為空白 的表述
你得根據你的業務需要選擇符合要求的運算式
又比如 我要判斷2個表單是否都填寫
if(empty($_POST['a']) || empty($_POST['b'])){
這樣才能是2個表單缺一不可,都則不能發布
用php手冊上的
if(empty($_POST['a']) && empty($_POST['b'])){
只要填寫1項 就發行就緒了
已親測!
你下面的代碼都沒寫全,我們怎麼知道是不是反的?
況且你怎麼確定原來作者的思路不是這樣的?
真服了你們了 我意思就是
if(empty($_POST['a'])) || empty($_POST['b'])){ echo "對不起 表格填寫不全";}else{ echo "發布成功";}
這種類型的代碼 在discuz中 被認為是 a表單和b表單 必須全部填寫才能發布
而
if(empty($_POST['a'])) && empty($_POST['b'])){ echo "對不起 表格填寫不全";}else{ echo "發布成功";}
則認為是 至少填寫1個 就發行就緒了
我也感覺奇怪 所以討論的 。。。。。。。
你自己的邏輯問題:你認為 c=a&&b; 與 !a或!b =c 相等?
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
exit('Access Denied');
}
意思是只要其中一個不滿足就退出,判斷的範圍要寬一些,如 桌子是四方的->桌子是四方桌,
而 或 則可以看成是:不是四方的或不是桌子不滿足四方桌。個人認為或用來判斷更有效率。
這個是表示,a為空白或b為空白都顯示表格填寫不全
if(empty($_POST['a'])) || empty($_POST['b'])){
echo "對不起 表格填寫不全";
}else{
echo "發布成功";
}
這個是表示 a和b同時為空白才顯示表格填寫不全
if(empty($_POST['a'])) && empty($_POST['b'])){
echo "對不起 表格填寫不全";
}else{
echo "發布成功";
}
邏輯上兩個就不同了,不明白為什麼樓主覺得有問題呢,這些是按需求來做的吧。