代码说

code is poetry

代码说    
碎碎念:双彩虹,好怀念那时候的日子,像风一样。  换一换

php编码规范

作者:coderzheng 发布于:2013-5-27 12:59 Monday 分类:php  阅读模式

/*
* PHP编码规范
* 本文档参照wordpess编码标准, 部分被作者改进
* By Roberson - 2012.05.19
* 索引
     1. 单双引号
     2. 空格
     3. 格式化SQL语句
     4. 命名约定
     5. 正则表达式
     6. 三元运算符
     7. 使程序语义简明
     8. 建议使用elseif, 而不是else if
     9. 书写HTML代码时, 确保遵循W3C规范
     10. 混编时PHP代码与html的部分适当错开
     11. 书写css时, 遵循CSS的编写标准
     12. 在纯php脚本的文件中, 省略php脚本的闭合标签
*/
  1. 单双引号
     1.1 // 当字符串中不需要计算任何值时使用单引号
               echo '<a href="/static/link" title="Yeah yeah!">Link name</a>';

     1.2 // 当字符串中需要计算值时使用双引号, 你不需要使用转义符, 因为可以使用下面这种形式
               echo "<a href='$link' title='$linktitle'>$linkname</a>";

          // 关于变量被单双引号包围的情况说明:
               通常情况, 变量直接被双引号包围时, 是会被解析为值的
               变量直接被单引号包围时, 不会被解析为值,
               $a = "yangzheng";
               $str1 = "$a";
               $str2 = '$a';
               echo $str1.",".$str2 // output: yangzheng,$a
               但是特殊的情况是, 单双引号互相嵌套时, 如:
               $str3 = "'$a'"; // output: yangzheng
               $str4 = '"$a"'; // output: "$a"
               要注意这种情况, 变量是否被解析为值取决于表达式最外层的符号
               当最外层是单引号时, 变量不被解析为值, 当最外层是双引号时, 变量被解析为值

            // 为了避免上述情况的发生, 统一改用分界符定界符{}来进行编码:
               $a = "yangzheng";
               $str = "this is '{$a}'"; // output this is 'yangzheng'
               定界符的基本用法是确保变量名的作用域总是在定界符内,但是不能保证使用了定界符之后,定界符内的变量一定会不解析为值。比如上面的$str3 = '"{$a}"'; 这里的$a就不会被解析为值。一种典型的需要使用定界符的情况是这样:
                $arr = array(
                            "0" => array("id"=>"12", "name"=>"asd"),
                            "1" => array("id"=>"121", "name"=>"1asd"),
                            );
                $str = "";
                foreach ($arr as $v) {
                    $str .= "<a>{$v['id']}</a>"; 
                    // 不加{}的情况下识别$v为变量, 后面的['id']为普通字符串, 由于$v是数组因此这里直接报错了。
                }
                echo $str;


  2. 空格
     2.1 使用空格的目的
               适当使用空格是为了使代码更容易被阅读
               当需要换行时, 使用Tab键而不是空格键来创建一个"空格"

               $a     = "value";
               $arr = array();
              
               // 数组在键名之前加一个tab, 一个键值对写完之后回车,
                    键值对的格式统一为: [Tab键]键名[空格键]=>[空格键]键值, (最后一个键值对不要去逗号)
               $arr = array(
                    "key1" => "value1",
                    "key2" => "value2",
                    "key3" => "value3",
               );

     2.2 空格的使用, 这里的空格指的是由空格键产生的空格
               if (condition) {
                    action1();
                    action2();
               } elseif (condition2 && condition3) {
                    action3();
                    action4();
               } else {
                    defaultaction();
               }
               // if行的格式统一为:
               if[空格键]([空格键]表达式[空格键])[空格键] {
               即使表达式内的语句只有一条, 仍然坚持使用大括号将他们包围
               与次类似的还有:

               foreach ($items as $item) {
                    process_item( $item );
               }

               foreach ($items as $item) {
                    echo "aaa";
               }

               switch ($s) {
                    case 'a':
                         action1();
                         break;
                    case 'b':
                         action2();
                         break;
                    case 'c':
                         action3();
                         break;
                    default:
                         action4();
                         //break;
               }
              
               for ($i=1; $i<=$n; $i++) {
                    $action1();
                    ...
               }
              

     2.3 不要使用短标记
    
     2.4 空格的其他用法
               $x == 23
               foo && bar
               !$foo
               array(1, 2, 3)
               $baz . '-5'
               $term .= 'X'
               str_replace( $str, 2, '2');
              
     2.5 关于空格的补充说明
               // 括号和参数之间何时加空格, 何时不加空格
               不管是用在什么地方, for ($parameter), if ($parameter), foreach ($parameter), switch ($parameter),
               function myfunction($p1, $p2, ) {}
               myfunction($p1) ...
               原则是这样的:
               两个或两个以上的参数之间, 总是用空格隔开逗号和下一个参数;
               使用空格总是为了使参数和结构体之间产生一定的距离, 便于阅读者能一目了然地分清楚哪些是结构体, 哪些是参数/表达式
               在程序结构清晰的前提下, 尽可能少得往程序中添加空格,
               如果参数不是复合结构的表达式, 如 $bool = "$a==$b";等, 只是单纯的变量名这种形式,不在参数和括号之间加空格;
               if ($bool) {} switch ($bool) { }...
               for ($i=1; $i<=$n; $i++) {
                    $action1();
               }
               当参数是复合结构的表达式时,  在适当的地方加上空格, 如:
               if ($bool = ($a==$b) ),
               if ( ($a==$b) )
               strpos($haystack, $needle);
               $H = array_shift( explode(':', $fdTime) );
               if ( !$foo ) {}

  3. 格式化SQL语句
               $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_title=%s WHERE ID...") )
               sql语句中的关键字部分一律大写化, 如CREATE, INSERT, WHERE, ORDER BY 等

  4. 命名约定
     4.1 变量名称可以使用驼峰命名法/下划线命名法, 建议使用驼峰命名法,
            特征是: 第一个单词小写, 后续单词大写开头, 简写的单词全部大写, 如:
            $keyID, $listsArr, $configDbArr,
            $key_id, $lists_arr, $config_db_arr,
            // 选择其中一种, 并保持命名的统一
    
     4.2 函数名称一律小写, 不要使用驼峰命名法, 使用下划线命名法
               set_shop_categories_arr() {} //设置商品分类的数组

     4.3 所有类的名称一律首字母大写, 仍然使用下划线连接
               class Walker_Categeory extends Walker {}
    
     4.4 缩略语全部大写化
               class WP_HTTP {}

     4.5 文件名一律小写化, 并且使用的是 中划线/下划线/点 连接
               my-plugin-name.php
               my_plugin_name.php
               my.plugin.name.php
               // 选择其中一种, 并保持命名的统一
    
     4.6 对于具有特定特征的文件, 使用特征名称和点号来命名文件, 如:
               class.wp.error.php
               template.index.htm

  5. 正则表达式
     应该使用符合POSIX的perl兼容的正则表达式,使用preg_replace_callback,不要使用/e开关.

  6. 三元运算符
     // (if statement is true) ? (do this) : (else, do this);
     $musictype = ( 'jazz' == $music ) ? 'cool' : 'blah';
     // (if field is not empty ) ? (do this) : (else, do this);

  7. 使程序语义简明
     使用
     if ( !isset($var) ) {
          $var = some_function();
     }
     而不是,
     isset($var) || $var = some_function();
    
  8. 建议使用elseif, 而不是else if,

  9. 书写HTML代码时, 确保遵循W3C规范

  10. 混编时PHP代码与html的部分适当错开
     使用
     if ($bool) {
          <div>
               <table>
                    <tr><td></td></tr>
                    <tr><td></td></tr>
                    <tr><td></td></tr>
               </table>
          </div>
     }
     而不是,
     if ($bool) {
     <div>
          <table>
               <tr><td></td></tr>
               <tr><td></td></tr>
               <tr><td></td></tr>
          </table>
     </div>
     }

  11. 书写css时, 遵循CSS的编写标准

  12. 在纯php脚本的文件中, 省略php脚本的闭合标签
          不书写php脚本的闭合标签("?>"), 是为了防止出现, 程序员不小心在闭合标签后面加了空格或者其他字符时, 程序编译出现异常的情况.

标签: php php编码规范

你可以发表评论、引用到你的网站或博客,或通过RSS 2.0订阅这个博客的所有文章。
上一篇: cookie和session的区别  |  下一篇:mysql常用命令