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
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
php方法调用模式与函数调用模式简例
Sep 20 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
php加密解密实用类分享
Jan 07 PHP
PHP引用(&)各种使用方法实例详解
Mar 20 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
PHP 读取文本文件内容并分页显示
Jan 02 PHP
PHP socket 模拟POST 请求实例代码
Jul 18 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
php面试中关于面向对象的相关问题
Feb 13 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
php 生成WML页面方法详解
2009/08/09 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
浅谈php提交form表单
2015/07/01 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
js图片跟随鼠标移动代码
2015/11/26 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
js面向对象编程总结
2017/02/16 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
python使用建议与技巧分享(一)
2020/08/17 Python
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
学校门卫工作职责
2013/12/07 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
英语分层教学实施方案
2014/06/15 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫