isset() vs strlen() - 快速/清晰的字符串长度计算
我遇到了这个代码...
if(isset($string[255])) {
// too long
}
isset() 的速度介于 6 和 40 之间,比
if(strlen($string) > 255) {
// too long
}
isset() 的唯一缺点是代码不清楚 - 我们无法立即分辨出正在做什么(参见 pekka 的答案)。我们可以将 isset() 包装在一个函数中,即 strlt($string,255),但这样我们就失去了 isset() 的速度优势。
我们如何在保持代码可读性的同时使用更快的 isset() 函数?
编辑:测试以显示速度 http://codepad.org/ztYF0bE3
strlen() over 1000000 iterations 7.5193998813629
isset() over 1000000 iterations 0.29940009117126
编辑2:这就是为什么isset()更快
$string = 'abcdefg';
var_dump($string[2]);
Output: string(1) “c”
$string = 'abcdefg';
if (isset($string[7])){
echo $string[7].' found!';
}else{
echo 'No character found at position 7!';
}
这比使用 strlen() 更快,因为“...调用函数比使用语言构造更昂贵。http://www.phpreferencebook.com/tips/use-isset-instead-of-strlen/
编辑3:我总是被教导要对mirco-optimization感兴趣。可能是因为我是在计算机资源很小的时候被教导的。我对它可能不重要的想法持开放态度,在答案中有一些很好的论据反对它。我开始了一个新的问题来探索这个...https://stackoverflow.com/questions/6983208/is-micro-optimisation-important-when-coding