Heim > Backend-Entwicklung > PHP-Tutorial > php数组键名 直接使用目录名 VS md5(目录名)?

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

WBOY
Freigeben: 2016-06-06 20:40:42
Original
1292 Leute haben es durchsucht

<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>
Nach dem Login kopieren
Nach dem Login kopieren

上述代码是对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>
Nach dem Login kopieren
Nach dem Login kopieren

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

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage