免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4812 | 回复: 13
打印 上一主题 下一主题

preg_replace_callback()快还是preg_replace()/e快 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-26 14:23 |只看该作者 |倒序浏览
如果我们要以运算的方式替换一段文本中大量的重复匹配模式,是使用preg_replace_callback()好,还是使用带有/e开关的preg_replace()好?

我觉得带/e开关的preg_replace()有代码重复编绎的嫌疑。也就是说,对于每一个匹配对象,preg_replace()都要重复eval一下目标代码,也就是每次匹配都要存在一个新的Parse过程。而用preg_replace_callback()时,每次匹配成功的对象都会传递给目标函数进行处理,不存在重复的Parse,从而效率更高,不知大家怎么看。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2006-12-26 14:51 |只看该作者
$n = 1234567;

$t = time();$i=$n;while($i--) preg_replace('/(.)/e','a("$1");','12')."\n";
echo "time=".(time()-$t)."\n";
$t=time();$i=$n;while($i--) preg_replace_callback('/(.)/','b','12')."\n";
echo "time=".(time()-$t)."\n";
$t=time();$i=$n;while($i--)  preg_replace_callback('/(.)/',
                create_function(
              '$s',
              'return $s[0];'
          ),
                  '12')."\n";
echo "time=".(time()-$t)."\n";

function a($s)
{
        return $s;
}
function b($s)
{
        return $s[1];
}
exit;

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
3 [报告]
发表于 2006-12-26 14:54 |只看该作者
楼主搞这么多这样子的讨论?

目的和在啊?

这样子的对比,在PHP实际应用之中,关系很小的。
除非你是要做实时性非常高的事情。例如我们做工业控制。

论坛徽章:
0
4 [报告]
发表于 2006-12-26 15:09 |只看该作者
其实探讨PHP脚本的执行效率是非常有意义的,因为PHP脚本编制出来不是用完一次就扔,而是往往要经历每秒数十次数百次重复执行,为了让有限的机器资源得到最大的产出,就必须努力提高脚本的运行效率。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
5 [报告]
发表于 2006-12-26 15:17 |只看该作者
在绝大多数的情况之下,探讨类似这样子的效率,是没有什么意义的。

与其拘泥於这个的效率,不如想办法更好地优化结构或者其他,你可以有更好的提高。

每秒数千次的执行,这个也不会带来效率上的问题。

当然,如果你是用PHP做密集型的运算,那令当别论。

论坛徽章:
0
6 [报告]
发表于 2006-12-26 16:24 |只看该作者
使用任何一种工具,都必须了解这种工具的优势和不足,才能扬长避短,而工具的效率是那些搞工具软件开发的人努力的目标。
我只是探讨PHP这一工具本身,并不是探讨如何用PHP来设计好程序。程序结构与PHP语言本身无关,一种好的程序可以用不同的编程语言来表达。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
7 [报告]
发表于 2006-12-26 16:43 |只看该作者
原帖由 zvxcv 于 2006-12-26 16:24 发表
使用任何一种工具,都必须了解这种工具的优势和不足,才能扬长避短,而工具的效率是那些搞工具软件开发的人努力的目标。
我只是探讨PHP这一工具本身,并不是探讨如何用PHP来设计好程序。程序结构与PHP语言本身无 ...


  想法不错。

  小生问一下,你是CC的吧?

论坛徽章:
0
8 [报告]
发表于 2006-12-26 16:52 |只看该作者
LZ这几天很活跃,不过老是在讨论这些问题有点浪费时间了吧
你想看速度,如乔版说的,写段程序测试一下就知道了
如果想知道如何实现的,PHP本身是开源的,把源代码看一遍肯定比从别人嘴里说出来的要来得可信

论坛徽章:
0
9 [报告]
发表于 2006-12-26 17:21 |只看该作者
楼主是高人,让别人去探讨,自己等结果

论坛徽章:
0
10 [报告]
发表于 2006-12-26 18:42 |只看该作者
在寻求一个答案之前,问一问别人可以少走弯路。虽然我可以通过测试来证实或否定自己的判断,或者用几天的时间从源代码中找到答案。但是如果人人都这样做,那么论坛就没有存在的必要了。我很乐意趁这次机会和大家探讨PHP内核的源代码,尽管我之前接触不多,但好象不受大家欢迎,我不知自己错在哪里?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP