zend framework 中的 php 编码标准 (一) - 文件格式...
时间:2010-08-11 来源:servyo
1. 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>" 。这是为了防止多余的空格或者其它字符影响到代码。
实际上这个问题只有当你不开启压缩或缓存输出时才会出现 :
// php.ini - 禁止压缩输出及缓存输出
zlib.output_compression = off
output_buffering = off
// foo.php - 注意这个时候有一些空格或换行符掉在了 "?>" 之后,当然这在页面上是看不到的
<?php
$foo = 'foo';
?>
// index.php - 在包含 foo.php 的同时,实际上我们已经输出了一些空格或换行了
<?php
include 'foo.php';
session_start();
?>
这时我们将看到一个警告 (warning) 说 "... Cannot send session cache limiter - headers already sent ..." 这是因为我们在 session_start() 之前输出了一些看不到的字符。
2. 由 __halt_compiler() 允许的任意的二进制代码的内容,被 Zend Framework 中的 PHP 文件或由它们产生的文件所禁止。
实际上这个规定是为了防止一些极个别的情况发生,例如上例中 :
// foo.php - 我们已经禁用了 "?>"
<?php
// 假如我们想通过 __halt_compiler() 输出某些东西
if (defined('__COMPILER_HALT_OFFSET__')) {
$fp = fopen(__FILE__, 'r');
fseek($fp, __COMPILER_HALT_OFFSET__);
var_dump(stream_get_contents($fp));
}
// 在程序结束时
__halt_compiler();
则在执行 index.php 时我们依然会看到警告,而只要把 __halt_compiler() 注释掉就不会报错了。需要注意的是 __halt_compiler() 实际上时语言结构,而非函数或方法。
3. 缩进由四个空格组成,禁止使用制表符 TAB 。
这个主要是为了代码美观整齐。因为在不同的编辑器里, TAB 制表符的长度是不一样的,而空格则是一样的。实际上这已经成为编写代码的默认标准之一。
例如 :
if ($x == 1) {
$indented_code = 1;
if ($new_line == 1) {
$more_indented_code = 1;
}
}
4. 变量赋值必须保持相等间距和排列。
例如 :
$variable1 = "demo";
$var2 = "demo2";
5. 每行代码长度应控制在80个字符以内,最长不超过120个字符。
因为 linux 读入文件一般以80列为单位,就是说如果一行代码超过80个字符,那么系统将为此付出额外操作指令。这个虽然看起来是小问题,但是对于追求完美的程序员来说也是值得注意并遵守的规范。
例如,下面是在 Zend/Navigation.php 中的一段代码 :
6. 每行结尾不允许有多余的空格。
这在很多 IDE 或者编辑器里都是可以设置的,例如在 save 保存操作执行时,顺便去掉多余的空格。
7. 行结束标志遵循 Unix 文本文件的约定,行必需以单个换行符 "\n" (LF) 结束。换行符在文件中表示为10,或16进制的 0x0A 。 不要使用苹果操作系统的回车 "\r" (0x0D) 或 Windows 系统的回车换行组合如 "\r\n" (0x0D,0x0A) 。
这个规定没有贬低苹果机或者 Windows 的意思,而事实确实是,LAMP 还是主流,所以遵循其文件约定也是为了在 liunx 系统上表现更好的性能。