關於PHP運算子的一點疑惑

來源:互聯網
上載者:User
我在手冊上看見的是

&&與$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 "發布成功";
}

邏輯上兩個就不同了,不明白為什麼樓主覺得有問題呢,這些是按需求來做的吧。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.