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可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
PHP无限分类(树形类)
Sep 28 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
php中$_POST与php://input的区别实例分析
Jan 07 PHP
php生成数字字母的验证码图片
Jul 14 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
Jan 04 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
php微信开发接入
Aug 27 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 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
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
js 颜色选择插件
2017/01/23 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
Django 导出 Excel 代码的实例详解
2017/08/11 Python
用python实现学生管理系统
2020/07/24 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
收银员岗位职责
2014/02/07 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
志愿者事迹材料
2014/12/26 职场文书
作弊检讨书范文
2015/05/06 职场文书
感恩主题班会教案
2015/08/12 职场文书
干部外出学习心得体会
2016/01/18 职场文书