PHP 高手之路(二)


Posted in PHP onOctober 09, 2006

二、编写漂亮的代码
  1.将后台程序与前端程序分开
  在编写PHP程序时,有些代码是用来处理一些事务,例如操作数据库、进行数学运算等,而另外的一些代码则只是事务处理的结果显示出来,例如一些使用echo语句将结果以HTML的格式显示在Web浏览器上的PHP代码以及那些直接嵌入PHP程序的HTML代码。首先我们应该清晰地区分这两种代码,把前者称为后台程序,把后者称为前端程序。
  因为PHP是一种嵌入式编程语言,也就是说,所有的PHP代码都可以嵌入到HTML代码之中,这为程序的编写带来了许多便利之处。但是,“物极必反”,如果在一段较长的程序中将PHP代码和HTML代码混合编写,这将使程序杂乱无章,不利于程序的维护和阅读。所以我们需要尽可能地将这些程序中混杂于HTML代码中的PHP代码移植出来,在专门的文件中将这些代码封装成函数,然后在HTML代码中使用include语句来包含这些文件,在适当的位置调用这些函数即可。
  这种做法一方面使HTML代码和PHP代码都简单易读,另一方面因为HTML代码需要不断更新,而这种分离的方法可以确保后台程序不会被破坏。
  同前端程序不同,后台程序更多追求的是稳定、结构化,极少更改,所以应该认真地设计和管理。其实,在设计台程序时,投入大量时间是值得的,“现在栽树,以后乘凉”,在以后的设计工作中将可以轻松地使用现在编写的后台程序。
  2.灵活使用包含文件
  正如前面所说的那样,后台程序应当安排在一系列的包含文件中。包含文件可以通过include语句在需要时动态装入,也可以在php.ini文件中通过使用auto_prepend_file指令预先自动装入。
  如果使用后一种方法的话,虽然取得了一劳永逸的好处,但是也有一些缺点值得我们注意。下面的一段代码向我们展示了解析一个庞大的包含文件需要一定的时间:
    require(timing.inc);
  ss_timing_start();
  include(test.inc);
  ss_timing_stop();
  echo
.ss_timing_current().

  ?>
  在上面的代码中,test.inc是一个1000行的包含文件,运行的结果显示,解析这个包含文件花费了0.6秒钟,对于一个大型网站来说,这个速度并不是可以忽略不记的。
  使用包含文件的另外一个缺点是:如果一个文件中的一个语句发生错误,将会使整个网站的PHP程序都无法运行。所以使用起来也及其小心。
  其实,对包含文件稍做处理,即可以使包含文件只在需要时进行解析。下面的代码使abc.inc文件只在程序需要时才作解析:
    if ( defined( __LIBA_INC) ) return;
  define( __LIBA_INC, 1 );
  /*
  * 代码...
  */
  ?>
  3.使用面向对象的编程方法
  PHP也是一种面向对象的语言,面向对象的编程方法是优秀的程序员们非常推崇的一种软件设计方法,在PHP编程中可以充分发挥面向对象语言的优势,对编程中的对象进行封装。在前面的代码中,我们使用了面向对象的方法,例如在管理数据库时,我们将query()函数封装进数据库类中,这极大地方便了代码的管理,增加了程序的可读性。
  三、追求程序速度,而不是编程的速度
  在网站建设中,程序运行速度和网页下载速度都是关系成败的重要因素。作为一名Web程序员,应该更加注意代码的运行速度。下面介绍的几种方法都在不同程度上提高了代码的运行速度。
  1.使用内嵌的HTML代码,而不是PHP的echo语句。
  因为PHP是一门嵌入式Web编程语言,可以将HTML代码和PHP代码相互嵌入。但是很多程序员担心在HTML代码中过多的使用""嵌入PHP代码会多次调用PHP解释器,从而降低了PHP代码的运行速度,所以宁愿使用PHP的echo语句来输出HTML代码,而不直接使用HTML代码。但事实却恰恰相反。每一个PHP页面只调用一次PHP解释器来解释所有的PHP代码,所以,只在需要时才嵌入PHP代码,而大多数的时候直接使用HTML代码输入结果,不但不会降低程序的运行速度,而且因为减少了对echo语句的解析,往往可以提高代码的运行速度。
  下面的一段代码证明了我们的结论。在这段代码中,我们使用了前面介绍的时间测试函数。

  

PHP 相关文章推荐
用PHP实现小型站点广告管理(修正版)
Oct 09 PHP
Apache2 httpd.conf 中文版
Dec 06 PHP
浅谈php扩展imagick
Jun 02 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
PHP实现懒加载的方法
Mar 07 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
PHP 高手之路(三)
Oct 09 #PHP
php&java(二)
Oct 09 #PHP
php&java(一)
Oct 09 #PHP
php&java(三)
Oct 09 #PHP
一个用于mysql的数据库抽象层函数库
Oct 09 #PHP
教你如何把一篇文章按要求分段
Oct 09 #PHP
全文搜索和替换
Oct 09 #PHP
You might like
用jquery来定位
2007/02/20 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
python通过shutil实现快速文件复制的方法
2015/03/14 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
软件工程师岗位职责
2013/11/16 职场文书
英语老师推荐信
2014/02/26 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
高一军训口号
2015/12/25 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
详解Python描述符的工作原理
2021/06/11 Python
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python