PHP 高手之路(三)

2015-03-30  来源:本站原创  分类:php基础  人气:1 

使用str-replace而不是ereg-replace
习惯使用Perl进行编程的程序员更加愿意使用ereg_replace完成字符串替换工作,因为在PHP中ereg_replace的用法和Perl中模式匹配的用法相近。但是,下面的这段代码证明,使用str_replace 代替 ereg_replace将可以大大提高代码的运行速度。

测试str_replace和ereg_replace的运行速度

//这段代码测试str_replace的运行速度

emphasis; ?>

for ($i=0; $i<1000; $i++) {
str_replace(i>, b>, $string).

}
?>

//这段代码测试ereg_replace的运行速度

for ($i=0; $i<1000; $i++) {
ereg_replace(<([/]*)i>, <\\1b>, $string).

}
?>

//打印结果

结论

使用str_replace的时间 -

使用ereg_pattern的时间 -
运行上面的代码,得到的结果是:
使用str_replace的时间 - 0.089757
使用ereg_pattern的时间 - 0.248881
从运行的结果我们可以看出使用str_replace替代ereg_replace作为字符串替换函数,极大地提高了代码的运行速度。
3.注意字符串的引用
PHP和其它很多编程语言一样,可以使用双引号(\"\")来引用字符串,也可以使用单引号()。但是在PHP中,如果使用双引号来引用字符串,那么PHP解析器将首先分析字符串中有没有对变量的引用,有变量的话,将对变量进行替换。如果是单引号,则没有如此复杂——直接将单引号包含起来的所有字符串直接显示出来。显然,在PHP编程中,如果使用单引号引用字符串变量要比使用双引号快速一些。
4.在数据库中避免使用联合操作
比起其它的Web编程语言来说,PHP的数据库功能十分强大。但是在PHP中数据库的运行仍然是一件十分费时费力的事情,所以,作为一个Web程序员,要尽量减少数据库的查询操作,同时应该为数据库建立适当的索引。另一件值得注意的事情是在用PHP操作数据库时,尽可能不使用多个数据表的联合操作,尽管联合操作可以增强数据库的查询功能,但是却大大增加了服务器的负担。
为了说明这个问题,我们可以看看下面的这个简单的例子。
我们在数据库中创建了两个数据表foo和big_foo。在数据表foo中,只有一个字段,包含了从1-1000之间的所有自然数。数据表big_foo同样只有一个字段,但包含了从1-1,000,000之间的全部自然数。所以,从大小上说,big_foo等于foo与它自身进行了联合操作。
$db->query(\"select * from foo\");
0.032273 secs
$db->next_record();
0.00048999999999999 secs
$db->query(\"insert into foo values (NULL)\");
0.019506 secs
$db->query(\"select * from foo as a, foo as b\");
17.280596 secs
$db->query(\"select * from foo as a, foo as b where a.id > b.id\");
14.645251 secs
$db->query(\"select * from foo as a, foo as b where a.id = b.id\");
0.041269 secs
$db->query(\"select * from big_foo\");
25.393672 secs
从上面操作结果我们可以发现,对于两个有1000条记录的数据表进行联合,其速度并不比对一个1000000条纪录的大型数据表单独进行操作快多少。
5.注意include与require的区别
在PHP变成中,include()与require()的功能相同,但在用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面的一个例子中,如果变量$somgthing为真,则将包含文件somefile:
if($something){
include(\"somefile\");
}
但不管$something取何值,下面的代码将把文件somefile包含进文件里:
if($something){
require(\"somefile\");
}
下面的这个有趣的例子充分说明了这两个函数之间的不同。
$i = 1;
while ($i < 3) {
require(\"somefile.$i\");
$i++;
}
在这段代码中,每一次循环的时候,程序都将把同一个文件包含进去。很显然这不是程序员的初衷,从代码中我们可以看出这段代码希望在每次循环时,将不同的文件包含进来。如果要完成这个功能,必须求助函数include():
$i = 1;
while ($i < 3) {
include(\"somefile.$i\");
$i++;
}
6.注意echo和print的区别
PHP中echo和print的功能也基本相同,但是两者之间也有细微差别。在PHP代码中可以把print作为一个普通函数来使用,例如执行下面的代码后变量$res的值将为1。
$ret = print \"Hello World\";
这意味着print可用在一些复杂的表达式中,而echo则不行。同样,在代码中echo语句的运行速度要略微快于print语句,因为echo语句不要求返回任何数值

相关文章
  • PHP 高手之路(三) 2015-03-30

    使用str-replace而不是ereg-replace 习惯使用Perl进行编程的程序员更加愿意使用ereg_replace完成字符串替换工作,因为在PHP中ereg_replace的用法和Perl中模式匹配的用法相近.但是,下面的这段代码证明,使用str_replace 代替 ereg_replace将可以大大提高代码的运行速度. 测试str_replace和ereg_replace的运行速度 //这段代码测试str_replace的运行速度 emphasis; ?> for ($i=0;

  • [6]技术浅谈--追溯技术之路(三) 2012-12-01

    今天加班到8点多,开始码字,像我一天说不了几句话,大部分时间是在群里面偶尔露一下脸,很多程序员都是木讷的,但是希望外人不要想象他们是傻, 蠢,因为他们谈到自己感兴趣的技术,即时再内向,也会滔滔不绝的谈上许久,当然一些各类的顾问不算在内,夜已经很深了,也是很多程序员该去休息的时候了! 备注:希望大家把建议以及想法说下,小刘是大家的!还有就是由于是初次触笔,文笔拙劣,还望大家海涵 开学第一天 日子过的很快,高考已经结束了,那段艰苦的日子对小刘来说简直是度日如年,酒桌上很多人都说怀念自己那些难忘的高中

  • PHP 高手之路(一) 2014-05-08

    PHP是一门高效的网络编程语言,由于它具有编写灵活.运行快速等优点,迅速成为Web程序员的首选语言.前不久的一份权威调查表明,现在已经有31.6%的网站使用PHP作为主要的服务器端编程语言. 但是,要成为一名PHP编程高手却并不容易.并不像很多人想象的那样,只要能够飞快地编写几条简单的代码去解决一个复杂的问题就是PHP编程高手了,真正的PHP高手还需要考虑更多的其它问题.以下三条准则是一名成熟的PHP程序员在编程中应该首先遵循的准则. 1.懒惰是金 2.编写漂亮的代码 3.追求程序的速度,而不是

  • Apple的平台之路(三) 2014-01-07

    上面是我理解的Apple正增长的模式(Jobs当初可能并非有意如此设计,很多东西是水到渠成,回头看看好像是计划好的,其实也是偶然或者发展的必然.我只是这样梳理一下而已) 这是一个逐步渐进发展,谨慎且充满野心的增长模式. 附注释如下: A 循环 这是Apple一直以来赖以生存的基础模式. 1.全面把硬件和软件都掌握在自己手里.这也是为什么有人说"Apple是一家软件企业",而从财务来看"Apple是一家硬件企业". 2.因为自己可以控制所有环节,所以可以更好的给消费者

  • 高手之路 全新跨门派技能 2015-02-09

    爆竹声声辞旧岁,虎跃龙腾贺春来.在国产大型武侠网络游戏<剑侠情缘网络版叁>(以下简称:<剑网3>)中,春节活动带给玩家的礼物多不胜数,惊喜一波接一波,所有玩家都过了一个礼物满满惊喜多多的快乐春节.那么春节后,<剑网3>又会为广大玩家带来哪些惊喜呢?今天就让我们一起来了解即将出炉的新一批"跨门派技能"! 五大门派绝学各有所长,如果融汇贯通,保证让您无可匹敌.要想让自己所修炼的别派武功更为精进,那10人战宝迦兰秘境不得不去.皆因,更多全新门派秘笈将从此秘

  • PHP高手之路 2013-01-02

    PHP是一门高效的网络编程语言,由于它具有编写灵活.运行快速等优点,迅速成为Web程序员的首选语言.前不久的一份权威调查表明,现在已经有31.6%的网站使用PHP作为主要的服务器端编程语言. 但是,要成为一名PHP编程高手却并不容易.并不像很多人想象的那样,只要能够飞快地编写几条简单的代码去解决一个复杂的问题就是PHP编程高手了,真正的PHP高手还需要考虑更多的其它问题.以下三条准则是一名成熟的PHP程序员在编程中应该首先遵循的准则. 1.懒惰是金 2.编写漂亮的代码 3.追求程序的速度,而不是

  • PHP 高手之路(二) 2015-01-08

    二.编写漂亮的代码 1.将后台程序与前端程序分开 在编写PHP程序时,有些代码是用来处理一些事务,例如操作数据库.进行数学运算等,而另外的一些代码则只是事务处理的结果显示出来,例如一些使用echo语句将结果以HTML的格式显示在Web浏览器上的PHP代码以及那些直接嵌入PHP程序的HTML代码.首先我们应该清晰地区分这两种代码,把前者称为后台程序,把后者称为前端程序. 因为PHP是一种嵌入式编程语言,也就是说,所有的PHP代码都可以嵌入到HTML代码之中,这为程序的编写带来了许多便利之处.但是,

  • 我的Node.js学习之路(三)--node.js作用.回调.同步和异步代码 以及事件循环 2015-02-18

    本篇文章主要介绍了node.js的几个重要的知识点:node.js作用.回调.同步和异步代码 以及事件循环 一,node.js的作用, I/O的意义,(I/O是输入/输出的简写,如:键盘敲入文本,输入,屏幕上看到文本显示输出.鼠标移动,在屏幕上看到鼠标的移动.终端的输入,和看到的输出.等等) node.js想解决的问题,(处理输入,输入,高并发 .如 在线游戏中可能会有上百万个游戏者,则有上百万的输入等等)(node.js适合的范畴:当应用程序需要在网络上发送和接收数据时Node.js最为适合.

  • inux高手之路:这些人有机会成为Linux高手 2012-08-22

    在网络中,不少服务器采用的是Linux系统.为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核.编译Linux 内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件.比如对于RedHat Linux,在/boot目录下有一些与Linux内核有关的文件,进入/boot执行:ls –l.编译过RedHat Linux内核的人对其中的System.map .vmlinuz.initrd-2.4.7-10.img印象可能比较深刻,因为编译内核过程中涉及到这些文件的

  • 十大编程算法助程序员走上高手之路 2015-01-10

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元素,称为 "

  • 如何从菜鸟成长为黑客高手 2014-07-25

    如何从菜鸟成长为高手!!这的确是一个很难回答的问题,但我总结出了答案:不断学习.积极学习:不断思考.积极思考.肯定会有人问为什么是这么简单的16个字.请往下看. 首先,什么样的人叫菜鸟?本意上是指对电脑知识懂的很的人,现在已经逐渐引申为对某一方面懂的少的人了.其实"菜鸟"一词没有一个明确的定义和界限,谁都可以称自己为菜鸟,也许自己真的懂的很少,也许是谦虚,反正这个词谁都能拿来套在自己身上.("高手"也一样,谁都可能成为高手,可谁敢声称自己是高手呢?)可是有一种人就不

  • 如何从网络菜鸟成长为网络技术高手 2014-03-19

    如何从菜鸟成长为高手!!这的确是一个很难回答的问题,但我总结出了答案:不断学习.积极学习:不断思考.积极思考.肯定会有人问为什么是这么简单的16个字.请往下看. 首先,什么样的人叫菜鸟?本意上是指对电脑知识懂的很的人,现在已经逐渐引申为对某一方面懂的少的人了.其实"菜鸟"一词没有一个明确的定义和界限,谁都可以称自己为菜鸟,也许自己真的懂的很少,也许是谦虚,反正这个词谁都能拿来套在自己身上.("高手"也一样,谁都可能成为高手,可谁敢声称自己是高手呢?)可是有一种人就不

  • Java自学之路 2009-04-11

    基础的三十个问题弄明白了以后,差不多能看看方法类的文章了.下面这篇文章写的特别好. JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当成学生,不要把自己的将来交给别人,学会运用自己的眼睛去观察,去了解这个世界吧. 每个培训机构都会宣传自己的好

  • 程序员人生之路 2012-12-06

    程序员人生之路(强烈推荐,分析的透彻!) 程序员人生之路(强烈推荐,分析的透彻!),某程序达人的人生感悟,估计没有半个甲子的时间,是绝对不可能感悟出来的. 转载自CSDN论坛:http://topic.csdn.net/u/20110323/16/16ebe2ac-bca5-49da-a050-45cf522a0828.html 原文在网上找了下:http://blog.csdn.net/b136364111/archive/2007/12/10/1927073.aspx 本文所指的开发工程师,

  • 安全跑路指南2013之乌云版 2013-07-25

    来源:乌云和LCX.CC 首先写这篇文章只是无聊之作,添加了自己的一些想发,如果因此文章造成的任何后果本人不负任何责任.还请大家遵守法律,因为你犯的事情实在太大你即使逃到国外也能给你引渡回来,此文章仅供走投无路的时候使用.如有错误或不合理的地方欢迎纠正... 本文章会持续连载,欢迎添加只看楼主功能. MENU 0.跑路前的准备 1.跑路中的注意事项 2.跑路中的身份隐藏/伪造 3.住宿/生活 4.GCD惯用方法 5.当你想家时怎么办? 6.当你不幸被抓时怎么办? 7.刑讯逼供等 第0章之准备(在

  • 谈新技术学习方法-如何学习一门新技术新编程语言 2014-08-11

    学习一门编程语言或者编程技术的方式基本上是这样一个流程: 1,对学习这门语言或者技术的必要性进行评估.比如你是工作需要,或者兴趣所至,甚至是为了把妹.这个必要性关系到你要学多深入,需要学习多长时间. 比如我想学Lua,是想学它如何在万把行代码里面实现了一个如此精巧的编程语言,想学习它的GC机制,学习它如何设计VM,如何用纯C语言设计项目等等. 2,寻找相关资源.比较好的起始点是这门技术的官方网站以及维基百科. 比如Lua语言的官方网站是http://www.lua.org,维基百科地址为http

  • 谈谈我对读研和软件学院的看法 2014-10-24

    编者按: 1 可能,在本文作者眼里,读研就是做研究.但是,其实现在中国的教育,硕士生更多的是在做应用,更多仍是实践而没有研究. 2 从自己出发,先看清楚自己读研的目的,读研其实目的很多,比如为了做研究,为了学历-- 不同的目的,读研的学习重点应该是不同的 3 本文可能已经出来了好几年了,那时软件学院刚成立不久,其教育和管理体制肯定比较不完善,所以才会有作者的"不建议考软件学院".其实,现在软件学院的学生已经慢慢被各大企业所接受,软件学院的学生之间的技术水平可能差别比较大,但其实也不缺乏

  • 一个软件测试工程师的学习体验 2015-01-24

    我最初参加测试工作的时候,不知道什么是软件测试,集成测试和系统测试的概念经常混淆, CMM 是什么就更加不知道了.那时候最简单的开关机也是通过直接拔插电源完成,安装系统对我来说简直是有史以来人类的最高技能,对于那些拿着螺丝刀安装机器的人就认为是宇内超级高手,身具杀人于无形之绝世秘技.拿破仑说不想当将军的士兵不是好士兵,我最初的梦想就是想成为软件测试的高手,傲视天下.所以不断偷师,总结经验,自认为掌握了成为高手的几个秘技,这几年混迹 "江湖"还算无往而不利.不敢独享,望与吾辈测试人员切磋

  • WPF不明内存泄露已解决,白头发也没了 2010-06-02

    阅读: 1452 评论: 6 作者: 周 金根 发表于 2010-06-02 14:12 原文链接 在上一篇中求助了一个内存泄露问题[WPF不明内存泄露原因,头发都白了几根],本篇与大家分享一下如何解决此问题的过程. 问题发现 用户使用产品时,使用久了会报出内存溢出错误,于是开始查找内存泄露问题.在[WPF -.Net 4.0解决了DataGrid分组时的内存泄露]中介绍了一个DataGrid内存泄露问题,这里主要说的是关闭模块后对象仍没有释放的问题. 问题解决 这个问题在本周之前已经由另一同事

  • [转载]不想提拔你,就是因为你只想把工作做好 2013-04-01

    我有个朋友,他30出头,在500强公司做技术经理.他戴无边眼镜,穿一身土黄色的夹克,下面是一条常年不洗的牛仔裤加休闲皮鞋,典型技术高手范.三年前,他帮助公司解决两个很大技术难题.当年的年会,大中华区的总裁拍着他的肩膀说,有前途!大家频频举杯,大家和他自己都觉得,小子机会来了!但是两年过去了,身边的人蹭蹭往上升,很多水平不如他的人还已经成为高管,只有他还是纹丝不动. 对于职场,他的想法象山楂树之恋一样单纯,他觉得职场就是一个靠本事吃饭的地方,只要提高能力,没有必要主动提要求,一切都会有的!但是又过