顯示廣告
隱藏 ✕
看板 tails
作者 tails (QQ)
標題 [PHP] 很無聊的小技巧
時間 2012年04月02日 Mon. PM 03:15:36


突然間終於了解這句後面在幹嘛的了 (Joomla / Xoops / Zend Framework等框架都會有類似這句)

defined(const) or die();

原本是知道這句是
const未定義時
它就會終止程式執行

依照不過我原先寫法可能就是

if(!defined(const))
{
	
die();
}

是很好懂,不過蠻多行的
以框架的用途來說一開始寫這樣
可能會有點多

雖然if也是能這樣寫:

if(!defined(const)) die();

但可能還是最上面這個寫法最好吧:

defined(const) or die();



至於為何能這麼用的原因是基於or / and / || / && 的特性 (| / & 不在此列)
or / ||的情況是,只要前面能決定是true,後面就不需要管了。
相反的
and / &&是只要前面能決定是false,後面也一樣不用做了。
所以參考上面的程式碼
or左邊的defined(const)只要是true,右邊的die()自然不會動作。

and / &&的例子 (參考網頁):

void quickSort(int number[], int left, int right) { 
    if(left < right) { 
        int i = left; 
        int j = right + 1; 

        while(1) { 
            // 向右找
            while(i + 1 < MAX && number[++i] < number[left]) ; 
            // 向左找  
            while(j -1 > -1 && number[--j] > number[left]) ; 
            if(i >= j) 
                break; 
            SWAP(number[i], number[j]); 
        } 

        SWAP(number[left], number[j]); 

        quickSort(number, left, j-1);   // 對左邊進行遞迴
        quickSort(number, j+1, right);  // 對右邊進行遞迴
    } 
}

中間的向右找、向左找也是使用&&的特性



這種寫法應該會比if快(吧)
只是這樣的寫法可能會增加閱讀程式的困難
使用上可能需要加點註解會比較好

--
※ 作者: tails 時間: 2012-04-02 15:15:36
※ 編輯: tails 時間: 2012-04-28 19:41:20
※ 看板: tails 文章推薦值: 0 目前人氣: 0 累積人氣: 264 
※ 文章分類: PHP
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇