登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

~~

~~

 
 
 

日志

 
 

php开发编码规范  

2015-11-30 17:50:46|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
良好的编码可以让代码看起来更优雅、结构更清晰、可读性更高及减少工作量。
1.php闭合标签?>对php的解析器是可选的。如果使用了闭合标签,文件中闭合标签后有空格可能会出现多余的输出、php错误、无法显示或者空白页。
   如果是纯php的文件,就可以不使用?>结束符,在最后一行留空即可。
  最好的方法是可以在文章的最后添加一个注释,说明这里是文件的结尾已经文件的路径等等。
 
使用闭合标签的:
<?php
echo "Hello World!";
?>

未使用闭合标签的:
<?php
echo "Hello World!";

/* End of file test.php */
/* Location: ./test.php */
2.使用无BOM编码
文件应使用Unicode编码(UTF-8),而不使用字节序标记(有BOM),于UTF-16和UTF-32不同,UTF-8不需要指明字节序,而字节序标记(BOM)在php中会产生预期外的输出,阻止应用程序设置自身的头信息。
如果输出了带有BOM,文件返回的是JSON的话就会出现解析错误。

3.Unix换行符
文件必须使用Unix换行符来保存(只有换行没有回车).

4.tab缩进代码
 编码器中一般设置 4个空格(space) = 1个制表符(tab)
 用tab代替空格有利于阅读代码的人在自己的应用编辑器中自定义缩进方式,可以使文件看起来更紧凑。

5.标记前后无空格
在php文件开始之前和结束之后都不能有空格,输出的时候已经被缓存,多以文件中的空格会导致php在输出自己的内容之前就开始输出,这样会使php出错并且不能正确的输出header().

6.文件命名
一个文件一个类,文件名称应该与类名相关联,关联的方法是以包所在的目录为根目录,到类所在的文件,将目录分隔符改为下划线或者首字母大写既是类的名称。比如我们的包名称为Myclass,路径为Myclass/Foo/test.php那么类名可以为Myclass_Foo_test或者MyclassFooTest

7.类和方法的命名规则
类名首字母大写。
如果类名由多个词组成则用下划线隔开;如果和文件相关联,则使用驼峰。
类中方法名称都要小写并且还可以直接根据方法名称看出方法的用途,用动词开头更好,尽量避免冗长和多余的名称。

不当的:
class superclass
class SuperClass

适当的:
class Super_class
class Myclass_Foo_Bar // class名和文件名关联

不当的:
function fileproperties() // 方法名没有清晰的描述以及下划线分割单词
function fileProperties() // 方法名没有清晰的描述以及使用了驼峰法命名
function getfileproperties() // 还可以!但是忘记了下划线分割单词
function getFileProperties() // 使用了驼峰法命名
function get_the_file_properties_from_the_file() // 方法名太冗长

适当的:
function get_file_properties() // 清晰的方法名描述,下划线分割单词,全部使用小写字母

8.为类和文件加上唯一标示
当一个类或者文件名为一个常见词语时,可能会与其他的类或者文件冲突,因此可以在类或者文件添加唯一标示来区分。
选择一个能够标示唯一开发者或者公司的前缀(会运行其他第三方组件或者php文件)。
不当的:
class Email pi.email.php
class Xml ext.xml.php
class Import mod.import.php

恰当的:
class Pre_email pi.pre_email.php
class Pre_xml ext.pre_xml.php
class Pre_import mod.pre_import.php

9.变量的命名
变量名应该只包含小写字母,用下划线分割,并且能够适当的指明变量的用途。一些短的、无意义的变量只用在迭代器中使用,如for()
不当的:
$j = 'foo'; // 单字符变量应该只作为for()的循环变量使用
$Str // 使用了大写字母
$bufferedText // 使用了驼峰命名,而且变量名应该更短,并有清晰的语法含义
$groupid // 多个词组,应该使用下划线分割
$name_of_last_city_used // 太长了

适当的:
for ($j = 0; $j < 10; $j++)
$str
$buffer
$group_id
$last_city
如果是私有变量,则要在变量前添加下划线
private $_foo

10.常量命名
常量名称全部都要大写,其他规则同变量名称命名规范。为了统一标识,可以给常量加上指定前缀。
不当的:
define('myConstant', 'foo'); // 未使用下划线分割单词,未全部使用大写字母
define('N', '2'); // 不能使用单个字母作为常量
define('S_C_VER', '1.0'); // 常量名没有清晰的含义

恰当的:
define('MY_CONSTANT', 'foo');
define('NEWLINE', '2');
define('SUPER_CLASS_VERSION', '1.0');

11.注释
详细的注释有助于给缺乏经验的程序猿描述代码的流程及意图,而且也有助于提供丰富的内容得以在几个月后再看自己的代码时依然能够很好的理解。
/**
* Super Class
*
* @package Package Name
* @subpackage Subpackage
* @category Category
* @author Author Name
* @link http://example.com
*/

class Super_class {
/**
* Encodes string for use in XML
*
* @access public
* @param string
* @return string
*/

function xml_encode($str)

引用文件和定义常量:
/** 定义变量 **/
define('MY_CONSTANT', 'foo');

/** 引用文件 **/
require_once 'Foo/Bar.php';

使用行注释,在大的注释块和代码中间留空行,行间注释用双斜线注释法:
// break up the string by newlines
$parts = explode("\n", $str);

// A longer comment that needs to give greater detail on what is
// occurring and why can use multiple single-line comments. Try to
// keep the width reasonable, around 70 characters is the easiest to
// read. Don't hesitate to link to permanent external resources
// that may provide greater detail:
//
// http://example.com/

$parts = $this->foo($parts);

12.大括号的位置
大括号换行规则与linux内核书写规范一致。if/else、while、do/while、for、switch这些可以带语句块的语句,语句块的 { 或者 } 应该和关键字写在同一行,用空格隔开,而不是独占一行。
if ($foo) {
} else if ($bar) {
}
类和方法的 { 和 } 独占一行:
class Super_class
{
function __construct()
{
}
}
switch 和语句块中的case、default要对齐,也就是在语句块中case、default标记相对于switch不往里缩进,但是标记下的语句要往里缩进。
switch ($foo) {
case 'A':
语句列表
case 'B':
语句列表
default:
语句列表
}

13.逗号的放置
函数中用逗号来分割参数,所有的参数与前边的逗号之间要空格(第一个参数除外)。
public function connect($host, $port, $db, $user, $password, $charset = NULL)

14.空格符的使用
除了参数之间需要使用空格外,其他操作符之间也需要使用空格,包括连接符 . 。
$a = "Hello";
$a = ($b = 4) + 5;
$a = $b . ':' . $c
通常情况下,不需要再方括号 [ ] 和圆括号 ( ) 内增加任何空格符。唯一的例外就是为了提高可读性和区别开它们与函数时,在接受参数的php语法控制结构所使用的括号里,增加空格符 
不当的:
$arr[ $foo ] = 'foo';

适当的:
$arr[$foo] = 'foo'; // 数组键值的方括号内没有空格

不当的:
function foo ( $bar )
{

}

适当的:
function foo($bar) // 函数声明的圆括号内没有空格
{

}

不当的:
foreach( $query->result() as $row ) // PHP语法控制结构之后有空格,但不是在圆括号内

适当的:
foreach ($query->result() as $row)

15.代码布局
a.类内部方法排序
__construct
private
protected
public
__destruct
b.属性排序
private
protected
public

16.逻辑运算符优先级
在php中,逻辑与和逻辑或者两种表现方式:&&、||、and、or,他们表示的含义都是相同的,但是他们的优先级不同,根据运算符的优先级排序为 &&(||)、=、and(or)
$a=1 && 0;
echo $a; //返回 空
$a=1 and 0;
echo $a; //返回 1

17.比较返回值与类映射
php函数在执行失败时返回false,但是也可能是一个有效的返回值 ' ' 或者 0,它在松散比较重会被计算为false。在条件语句中使用这些返回值的时候,为确保返回值是你所预期的类型而不是一个有着松散类型的值。

在返回和检查自己的变量时,也要遵循这种方法,必要时,使用 === 和 !==。

不当的:
// 如果 'foo' 位于此字符串的起始处,strpos将返回 0,
// 此处条件判断的结果为TRUE
if (strpos($str, 'foo') == false)

恰当的:
if (strpos($str, 'foo') ===
false)

不当的: 
function build_string($str = '')
{
if ($str == '') // uh-oh! 如果传递的参数是FALSE或者整数0那会怎么样?
{
}
}

恰当的:
function build_string($str = '')
{
if ($str === '')
{

}
}

18.大小写敏感


















  评论这张
 
阅读(46)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018