ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
## 文件格式 - #### PHP标签 > 关闭PHP标签仅包含PHP代码的文件应始终省略关闭的PHP标记(?>)。否则可能导致白屏。 - #### 缩进 > 所有缩进为tab而非空格。当需要适当补全时,才可使用空格处理。 ```php // indented 2 tabs $var = 'something'; // indented with tabs and aligned value & comments $variable = 'else'; // with those above/below using spaces ``` - #### 回车 > 采用unix的换行格式。「Unix-style LF」 - #### 命名文件 > 所有文件名,以小写命名。 - #### 编码方式 > utf-8,with NO BOM。 ### 命名约定 - #### 命名空间 > 所有核心类必须在Fuel \ Core命名空间下。 ```PHP namespace Fuel\Core; ``` - #### 类 > 类名应使用下划线分隔单词,并且类名中的每个单词均应以大写字母开头。下划线将在自动加载期间转换为目录分隔符。 > > **原则上不使用驼峰命名**。 ```php namespace Fuel\Core; class Session { } ``` ``` php namespace Fuel\Core; class Session_Cookie extends Session_Driver { } ``` <!-- 如果按以上命名,将访问以下文件路径 --> ``` php core/classes/session.php core/classes/session/cookie.php ``` - 方法 > 与类名一样,方法名应使用下划线分隔单词,而不是驼峰。方法名称也应该全部小写。始终应包括可见性( public, protected, private )。 - #### 变量 - 变量名称应简洁明了,并且仅包含小写字母和下划线。循环迭代器应较短,最好是单个字符。 ``` php $first_name $buffer for ($i = 0; $i < $max; $i++) ``` - #### 常量 > 变量名称应简洁明了,并且仅包含小写字母和下划线。循环迭代器应较短,最好是单个字符。 ``` php MY_CONSTANT TEMPLATE_PATH TEXT_DEFAULT ``` 不建议使用全局常量,并且应将其绝对降至最低。在可能的情况下,使用类常量来明确其范围,用法和含义。 ### 关键词 > 关键字,例如 `true`,`false`,`null`,`as` 等,应该都是小写的,因为大写是为常量保留的,变量类型 也应当小写,比如 `array`,`integer`,`string` ### 强制类型转换 > 不建议使用类型转换。PHP是一种弱类型语言,有时类型转换规则非常模糊。它们可能会导致意外的行为,从而可能会导致很难发现错误。而是在转换之前进行内容检查,以确保变量包含期望值。 ### 控制结构 结构的关键字,如if,for,foreach,while,switch应当后跟一个空格。花括号应放在新行上,并break具有与大小写相同的选项卡。break与case 同级。 ~~~ if ($arg === true) { //do something here } elseif ($arg === null) { //do something else here } else { //catch all do something here } foreach ($array as $key => $value) { //loop here } for ($i = 0; $i < $max; $i++) { //loop here } while ($i < $max) { //loop here } do { //loop here } while ($i < $max) switch ($var) { case 'value1': //do something here break; default : //do something here break; } ~~~ ##### 替代if语句 > 在某些情况下,使用完成的 `if` 语句使代码变得太长。建议使用三目运算,来完成需要的判断。 ~~~ // instead of if (isset($var)) { Config::set('var', $var); } isset($var) and Config::set('var', $var); // instead of if ( ! isset($var)) { $var = Config::get('var'); } isset($var) or $var = Config::get('var'); // DON'T DO THIS Uri::segment(3) and $var = Uri::segment(3); Uri::segment(3) or $var = 'default'; // This is better: if (Uri::segment(3)) { $var = Uri::segment(3); } else { $var = 'default'; } // Or this: $var = Uri::segment(3) ? Uri::segment(3) : 'default'; // Or even better, this: $var = Uri::segment(3) ?: 'default'; ~~~ ### 比较,逻辑运算符 > 比较函数/方法的返回值和变量,应该了解比较两边的数据类型。在比较返回值时 应,尽量使用对类型敏感的绝对等于或绝对不等于,使用`and`和`or`,替换` &`和`||` 来提高代码可读性。在`!`使用时,应在左右都留有空格。 ~~~ if ($var == false and $other_var != 'some_value') if ($var === false or my_function() !== false) if ( ! $var) ~~~ #### 类/接口声明 > 类/接口声明在以下行中有左括号: ~~~ class Session { } ~~~ > 如果类为空,则大括号将与定义位于同一行: ~~~ class Empty_Class { } ~~~ #### 功能/方法/关闭声明 > 功能/方法/闭合开口支架必须始终从新行开始,并具有与其结构相同的缩进。 ~~~ class Session { public static function get_flash($name, $data) { $closure = function($a, $b) { // Your closure code here } } } ~~~ #### 变量 > 初始化变量时,每行应声明一个变量。为了提高代码的可读性,它们应分别放在单独的行上。适当的对齐值和注释。 ~~~ $var = ''; // do each on its own line $other_var = ''; // do each on its own line ~~~ #### 括号和括号 > 初始括号/括号之前或之后不得有空格。合上括号/括号之前不能有空格。 ~~~ $array = array(1, 2, 3, 4); $array['my_index'] = 'something'; for ($i = 0; $i < $max; $i++) ~~~ #### 字符串引号 > 单引号优于双引号。它可以防止变量和控制字符的意外或意外扩展。 #### 级联 > 字符串串联不应在连接的部分周围包含空格。 ~~~ //yes $string = 'my string '.$var.' the rest of my string'; //no $string = 'my string ' . $var . ' the rest of my string'; ~~~ #### 运算符 ~~~ $var = 'something'; if ($var == 'something') //space before and after logical operator $var = $some_var + $other_var; //space before and after math operator $var++; // no space before increment ++$var; //no space after increment ~~~ ##### 数组点符号 尽管严格地说,它不是编码标准,但是在框架类和本文档中已使用了很多,并且由于它不是通用的PHP表示法,因此可能会使刚接触框架的人感到困惑。 ~~~ // when you see "always_load.packages = array()", it is shorthand for: array("always_load" => array("packages" => array(...) ) ); ~~~ Arr类以及Lang,Config和Session类使用此表示法来快速访问多维数组中的各个元素。 ~~~ // when you have an array structure like this $array = array( "always_load" => array( "packages" => array( "orm", "package" => "/my/special/package.php", ) ) ); // then this will return "/my/special/package.php": $path = Arr::get($array, 'always_load.packages.package'); ~~~