php数组键名 直接使用目录名 VS md5(目录名)?

WBOY
リリース: 2016-06-06 20:40:42
オリジナル
1245 人が閲覧しました

<code>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;
</code>
ログイン後にコピー
ログイン後にコピー

上述代码是对include_once的优化,在每次include $file的时候都将$file放入$funcs中,避免重复导入。
那么问题是:$key = md5($path);是什么依据,感觉这么做没什么意义。

回复内容:

<code>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;
</code>
ログイン後にコピー
ログイン後にコピー

上述代码是对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都会首先被哈希一发,所以不需要你提前处理。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!