第8章 PHP开发规范
时间:2007-10-26
来源:互联网
8.1代码结构
在本节,我们讨论一些关于在Web应用程序中组织代码的方法。
8.1.1一个脚本服务全部
一个脚本服务全部,指的是由一个文件负责接收所有的URL请求以及根据不同的请求显示不同的页面逻辑。
实现的原理是,使用不同的参数给一个脚本程序,比如这个脚本名称叫做index.php,我们规定脚本可以从URL(浏览器地址栏)上接收 GET参数,比如:index.php?action=register。
并不是说把所有的代码都放在这个index.php里,而是根据不同的参数,用include或require语句,将相应的外部代码或函数引入进来。
请见如下的脚本实例:
PHP代码:
<?php
//包含公共的头文件
include_once('header.php');
//取得GET变量$action的值
$page = $_GET['action'];
//根据$action的不同值做分发处理
switch($page) {
case "home":
$c;
break;
case "about":
$c;
break;
case "product":
$c;
break;
default:
$c;
break;
}
//开始包含相关的文件,显示出来
include_once($content):
//包含公共的版权信息文件
include_once('footer.php');
?>
图8-1
使用该脚本时,需要通过URL的GET方法进行参数传递,代码如下:
PHP代码:
<a href="index.php?action=about">关于我们</a><a href="index.php?action=product">产品中心</a>
<a href="index.php?action=contact">联系我们</a>
我们可以设想,使用case后有多少不同的模块,但是当程序中有很多个模块和参数时,这个switch case语句需要做的分发处理逻辑将非常大。
为防止过多的switch使程序变得臃肿难于维护,我们可以使用如下方式,就不必使用那么多的switch语句了,代码如下:
PHP代码:
foreach (directory in "modules/") {//模块文件所在的目录if file_exists("definition.php") {//如果模块文件存在
module_def = include "definition";//包括存在,则包含之
register_module(module_def);
}
}
if registered_module($_GET['module']) {
$driver = new $_GET['module'];
$driver->execute();
}
8.1.2分离显示逻辑
有两种步骤,我们需要分离业务逻辑与显示方式从页面中抽出。
我们可以自己编写模板方法,或使用一些模块引擎,关于分离显示与业务逻辑,请看第18章“Smarty与模板技术”。
作者: PHPChina 发布时间: 2007-10-26
一个良好的的代码编码风格和样式,十分重要。在一个脚本以及整个项目中,如果堆积了各种风格不同的代码,一旦有工作交接,无论是新的或老的开发人员在开始会被弄得非常糊涂。
编码风格与个人的行事风格有关,开发者可能更喜欢按照自己的习惯与风格编写代码。但是在编码中有几点需要开发者注意:代码的格式、布局、隔行空白的宽度、代码中SQL语句的规范等的编写应该遵循一定的规范,这些规定虽然并非强制性的,但为了加强代码结构的逻辑性和易读性,遵循它们是非常必要的,请各位读者一定要牢记。
作为优秀的负责任的PHP开发者,在项目中从始至终都应遵守一种开发风格,并且不断完善并坚持下去,使之成为一个完美的标准。
下面讲述在PHP编码中,需要开发者注意和学习的几点。
8.2.1代码注释
以下是几种标准的PHP代码注释样式:
1.单行注释//Note
请见以下样例:
PHP代码:
<?php
// Title: My PHP program
// Author: Jason
print "This is a simple PHP program";
?>
请见以下样例:
PHP代码:
<?php
# Title: My First PHP Script
# Author: Jason
print "This is a PHP program";
?>
/**
* Local variables
* tab-width:2
*
*/
请见以下样例:
PHP代码:
<?php
/*
* Title: My PHP Program
* Author: Jason
* Date: May 10, 2006
*/
print "This is a PHP program";
?>
8.2.2代码缩进
代码缩进指的是,在PHP源代码中,我们使用TAB(制表键)对齐代码。比如,有一个程序的处理逻辑是根据月份返回当月的天数,原来编写的代码是这样的:
PHP代码:
<?php
if($month == '12' || $month == 'setmember'|| $month == '12' || $month == 'setmember') {
return 28;
}
?>
PHP代码:
<?php
if($month == '12' ||
$month == 'setmember'||
$month == '12' ||
$month == 'setmember')
{
return 28;
}
?>
图8-2
可以看到,第二个版本的代码样式明显要清晰于第一个版本,它变得更加易读。需要注意的是,不同的编辑工具对TAB的缩进有不同的规定,这需要开发者在编辑器使用相同的字符个数缩进规定。
8.2.3使用必要的空格
为了代码的整齐,我们可以使用适当的空格来对齐代码,请见如下代码:
PHP代码:
$lt = localtime();$name = $_GET['user_name'];
$month = $lt['tm_mon'] + 1;
8.2.4SQL编写规范
在程序中,编写SQL语句的规范有如下几点:
Ø大写SQL的保留字;
Ø在超长的SQL语句中,保留字的后面请适当换行;
Ø使用表格的别名(AS Alias)使SQL语句更清晰。
请见如下代码:
PHP代码:
$sql = "SELECTaccount_id,
order_total_price,
order_cc_number,
order_cc_exp_dt,
order_ship_dt,
order_pfp_confirm,
status,
created_dt
FROM
".PREFIX."_orders
WHERE
order_id = '".$_REQUEST[OrderId]."'
";
有的PHP程序员喜欢用.(小圆点)连接SQL,这样看来的确很美观,只不过PHP要多花一点点时间连接这些字符串,效率会有所降低。有关SQL执行效率的讨论我们会在数据库一章详细讲述。
8.2.5控制结构
围绕控制结构的写法可能是程序员们最喜欢争议的话题。关于写法主要有以下三种样式,你必须在项目中选择一个一致的写法:
1.BSD样式if($condition){
//语句体
}
本书中的PHP代码全部采用BSD样式,一是为了保持一致,二来也节省篇幅。
2.GNU样式if($condition)
{
//语句体
}
3.C语言样式if($condition) {
//语句体
}
8.2.6函数的命名
在函数一节,我们介绍过函数多半是用于完成某项任务的代码段,即完成某个动作或操作,所以应该以动词作为函数名称。
比如下面的函数命名例子:
PHP代码:
function checkOrder($ProductId){echo "您选择了编号为$ProductId的商品";
}
函数的名字也可以用”_”下划线分隔,如:
function check_order($ProductId){
echo "您选择了编号为$Productid的商品";
}
同样,函数的命名规范也适合PHP文件名的命名,比如将文件命名为:myIndex.php,orderForm.php或者my_index.php,order_form.php。
8.2.7类命名规范
类的命名规则,源自C++和Java的命名规范,这些规范也适用于PHP。PHP类的命名规则如下:
Ø类名称的第1个字符为大写:
Ø长单词的类名称需要截取,并且第1个字母必须为大写。
以下为类声明的两个例子:
class XML_RSS{}
class Text_PrettyPrinter{}
关于面向对象与类,我们在下一章会详细说明。
8.2.8减少出错的技巧
1.不使用短标识符在第1章中,我们就强调过这个问题,这里再强调一下,不要再用下面的短标识符(short_tag)编写程序:
<?=$_REQUEST['passport_name'] ";?>
从PHP5以后,php.ini文件中的short_tag选项是关闭的,因此如果使用短标识符编写程序可能导致该程序不能执行,另外,按照Web开发的行业标准,也应该采用XML标准来开发程序,使用如下语句:
PHP代码:
<?xml version= "1.0 " ?>
下面的脚本是可以通行在任何PHP环境中的:
<?php
echo $_REQUEST['passport_name'];
?>
下面的代码使用echo语句输出HTML:
PHP代码:
<?php
echo "<table> ";
echo "<tr><td>姓名</td><td>位置</td><td> ";
foreach ($userArray as $userItem){
echo " <tr><td>$userItem[Name]</td><td>$userItem[Position]<td></tr>";
}
echo " </table> ";
?>
PHP代码:
<table>
<tr><td>姓名</td><td>位置</td><td>
<?php foreach ($userArray as $userItem){ ?>
<tr><td><? echo $userItem[Name]; ?></td><td><? echo $userItem[Position]; ?><td></tr>
<?php } ?>
</table>
8.3小结
PHP开发人员有时被人称为草根一族,主要因为没有一个官方的PHP开发规范。在很多现在的开发团队中,有不少人是半路出家,将开发规范根本视为不存在,因此导致代码的低效和可维护性较差。如果我们遵循了一些规范,除了代码的可维护性会提高之外,您的程序员生涯将从此迈入一个新的境界,或许将从一个小工进而成为一位开发规范、作风严谨的PHP软件开发者。
作者: PHPChina 发布时间: 2007-10-26
这里还是提供一份电子版,刚做的要不好的地方提出改正,谢谢!!!:)
作者: jfcat 发布时间: 2007-10-26
作者: zheman 发布时间: 2007-10-26
作者: chaizhiyong 发布时间: 2007-10-26
引用:
原帖由 chaizhiyong 于 2007-10-26 14:46 发表印度的IT技术之所以仅次于美国,是因为他们编写程序都是按照一定的规范来写的,在他们那里,在一个班上出同一道程序题,他们写出来的程序是一模一样的,而且简单易懂。显而易见程序规范对一个国家还是个人是多么 ...
作者: jfcat 发布时间: 2007-10-26
虽然到下次打开的时候有些代码自己也不清楚功能了,
但还是不记得写,这不知该如何解决了
作者: jingangel 发布时间: 2007-10-29
作者: b136364111 发布时间: 2007-10-29
作者: b136364111 发布时间: 2007-10-29
引用:
原帖由 b136364111 于 2007-10-29 11:36 发表对于规范代码而言,本人觉的这本书做的很好,代码段落语句清晰,注释详细,而且分不同颜色予以标示,很为读者考虑,这样对读者有很好的规范和参考意义,对于学习者的提高很有帮助。本人感觉对于规范代码而言,在 ...
作者: jfcat 发布时间: 2007-10-29
作者: zwws 发布时间: 2007-10-30
作者: b136364111 发布时间: 2007-10-30
不错啊 一辆好车 不知什么牌子
作者: b136364111 发布时间: 2007-10-30
作者: jfcat 发布时间: 2007-10-31
像SQL编写规范,最近在改些程序,有些很多复杂的SQL语句。而原作者由于未注重编写规范,无论保留字还是字段名一律小字且全在一行,读起来一塌糊涂。先要修改其格式规范,才好读懂语句的原义。
不过常用的Editplus对SQL语法的识别不那么智能,手动换行后颜色往往匹配不上,倒也会影响阅读。
[ 本帖最后由 涛tall 于 2007-11-3 11:42 编辑 ]
作者: 涛tall 发布时间: 2007-11-03
8.2.8减少出错的技巧1中才提过,“不使用短标识符”,“2.减少脚本中输出HTML”中给出的代码,却使用了短标识符:
PHP代码:
<table>
<tr><td>姓名</td><td>位置</td><td>
<?php foreach ($userArray as $userItem){ ?>
<tr><td><? echo $userItem[Name]; ?></td><td><? echo $userItem[Position]; ?><td></tr>
<?php } ?>
</table>
PHP代码:
<table><tr><td>姓名</td><td>位置</td><td>
<?php foreach ($userArray as $userItem){ ?>
<tr><td><?php echo $userItem[Name]; ?></td><td><?php echo $userItem[Position]; ?><td></tr>
<?php } ?>
</table>
引用:
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。PHP代码:
<table><tr><td>姓名</td><td>位置</td><td>
<?php foreach ($userArray as $userItem): ?>
<tr><td><?php echo $userItem[Name]; ?></td><td><?php echo $userItem[Position]; ?><td></tr>
<?php endforeach; ?>
</table>
作者: 涛tall 发布时间: 2007-11-03
作者: siemenliu 发布时间: 2008-01-04
作者: siasford 发布时间: 2008-03-02
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28