php數組鍵名 直接使用目錄名 VS md5(目錄名)?

來源:互聯網
上載者:User
static $funcs = array();... ...$key = md5($path);if (isset($funcs[$key])) return true;if (file_exists(PC_PATH.$path)) {    include PC_PATH.$path;} else {    $funcs[$key] = false;    return false;}$funcs[$key] = true;return true;

上述代碼是對include_once的最佳化,在每次include $file的時候都將$file放入$funcs中,避免重複匯入。
那麼問題是:$key = md5($path);是什麼依據,感覺這麼做沒什麼意義。

回複內容:

static $funcs = array();... ...$key = md5($path);if (isset($funcs[$key])) return true;if (file_exists(PC_PATH.$path)) {    include PC_PATH.$path;} else {    $funcs[$key] = false;    return false;}$funcs[$key] = true;return true;

上述代碼是對include_once的最佳化,在每次include $file的時候都將$file放入$funcs中,避免重複匯入。
那麼問題是:$key = md5($path);是什麼依據,感覺這麼做沒什麼意義。

首先我覺得這麼做是沒意義的,不會比直接用 include_once 更好。

然後這是一個比較常見的設計(雖然我覺得在這裡沒有什麼意義),在需要通過 key 來尋找 value 時,如果沒有擷取 key 的需要,那麼可以將 key 散列之後作為 key, 這樣可以:

  • 避免因為 key 含有特殊的字元,或者為空白造成一些詭異的錯誤
  • 避免因為 key 很長而佔用大量的記憶體

  1. 儲存上考慮,md5值整齊,長度一致,path可能會很長
  2. ~~效率上考慮,path很可能前面很長一段都是一樣的,比如../../lib/service/database/...,而md5值比較離散,一般比較開頭1~2個字元就可以確定是否不同~~

謝樓下指正,第2點描述不正確。翻了下源碼,array內部確實對key已經有了hash操作,所以這裡多一次md5的hash沒有太大必要

md5一下再存沒必要。PHP的數組就是個黑洞級雜湊表,什麼都能往裡塞。 你無論輸入什麼,key都會首先被雜湊一發,所以不需要你提前處理。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.