时间:2021-07-01 10:21:17 帮助过:17人阅读
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, 这样可以:
../../lib/service/database/...
,而md5值比较离散,一般比较开头1~2个字符就可以确定是否不同
~~谢楼下指正,第2点描述不正确。翻了下源码,array内部确实对key已经有了hash操作,所以这里多一次md5的hash没有太大必要
md5一下再存没必要。PHP的数组就是个黑洞级哈希表,什么都能往里塞。 你无论输入什么,key都会首先被哈希一发,所以不需要你提前处理。