コーディング標準に関する PHP ドキュメント (コレクション)

黄舟
リリース: 2023-03-14 09:44:01
オリジナル
1757 人が閲覧しました

作業効率を向上させ、開発の有効性と合理性を確保し、プログラムコードの可読性と再利用性を最大限に高め、コミュニケーション効率を向上させるためには、コード記述仕様が必要です。誰もが良いコーディング習慣を身につけ、コードのバグを減らしましょう。
CleverCode はいくつかの仕様をまとめました。この仕様には、命名規則、コードのインデント規則、制御構造、関数呼び出し、関数定義、コメント、インクルードコード、PHP タグ、および PHP 開発中のプログラムコーディングにおける一般的な命名規則が含まれます。

1 PHP バージョンとサーバーの両方が、デフォルトで短いタグ オプションをサポートまたはオンにします (PHP5.4 以降、php.ini の短いタグ オプションは短いタグの使用に影響しません)。 PHP コードのみを含むファイルの場合、ファイル末尾の ?> は無視されます。これは、余分なスペースやその他の文字がコードに影響を与えるのを防ぐためです。

2) 実際、この問題は、圧縮またはキャッシュされた出力が有効になっていない場合にのみ発生します。例:

php.ini - 圧縮出力とキャッシュされた出力を禁止します

<?php  
//推荐  
echo &#39;hello world&#39;;  
?>  
  
  
<?  
//短标签格式不推荐  
echo &#39; hello world &#39;;  
?>
ログイン後にコピー

foo.php、いくつかのスペースまたは改行があることに注意してください。今回は遅れてしまいました、もちろんこれはページ上では見ることができません。

zlib.output_conpression = off
output_buffering = off
ログイン後にコピー

index.php は、foo.php をインクルードしていますが、実際にはスペースや改行を出力します。

<?php  
    $foo= &#39;foo&#39;;  
?>
ログイン後にコピー

この時点で、「...Cannotsendsessioncachelimiter-headersalreadysent...」という警告が表示されます。


1.2 ファイルとディレクトリの名前付け

プログラムのファイル名とディレクトリ名はすべて意味のある英語で付けられます。または意味のない文字、文字、数字、下線、および下線文字のみが許可され、「.php」で終わる必要があります(テンプレート ファイルを除く)。
//クラスは一律に

DemoTest.php を使用します


2 命名仕様

2.1 変数の命名

PHP の変数は、変数名が後に続くドル記号で表されます。変数名では大文字と小文字が区別されます。有効なモーフ名は文字またはアンダースコアで始まり、その後に任意の数の文字、数字、またはアンダースコアが続きます。通常の
正規表現
は、[a-zA-Z_x7f-xff][a-zA-ZO-9_'x7f-xff] のように表現され、中国語などの非 ASCII 文字を変数に使用しないでください。

2.1.1 プログラム全体

プログラム全体は、小文字で始まるキャメルケースで名前が付けられます。名前は次のように意味のあるものでなければなりません:

<?php  
    include &#39;foo.php&#39;;  
    session_start();  
?>
ログイン後にコピー

2.1.2 PHP グローバル変数のキー値PHP グローバル変数キー値には両側があります。中央でキャメルケースの名前を使用します。

2.1.3 通常の変数

通常の変数は全体としてキャメルケースを使用し、

慣例に従って名前を付け、一般的なキーワードや曖昧な意味を持つ単語の使用を避けます。変数は名詞ベースである必要があります。

String: $myName

Array: $myArray

非推奨:

$yes: 変数は変更される可能性があり、Syeszflase が発生してコード ロジックが混乱する可能性があるため、ブール変数として使用しないでください。

$sex: 意味が曖昧で信頼性のない英語の単語。性別の名前は $gender にする必要があります。


2.1.4 関数名

関数名は、一目で何をするのか分かるように意味のあるものにし、できるだけ短縮する必要があります。 showMsg など、動詞または動詞と形容詞
の命名方法を使用することをお勧めします。次の関数名は推奨されません:

function displayName($name){  
    echo $name;  
}
ログイン後にコピー

上記の関数名は次のように改良できます:
getPublishedAdvertisementBy
CategoryAndCategoryldAndPosition()
ログイン後にコピー

例 1) クラスのパブリック関数:

getAd($category,$categoryid,$position,$published)
ログイン後にコピー

例 2) 「_」で始まるクラスのプライベート関数:

public function doGetUserName($job)
ログイン後にコピー

例 3) "_" で始まるクラス保護関数:


private function _doGetUserName($job)
ログイン後にコピー

2.1.5 クラス内の属性


クラス内の変数は、通常の変数の命名規則に従います。

例 1) パブリック プロパティ、静的プロパティ:


protected function _doGetUserName($job)
ログイン後にコピー

例 2) "_" で始まるプライベート プロパティ:

public $userName = ’CleverCode’;
static $userType = array(1,2,3);
ログイン後にコピー

例 3) "_" で始まるプロテクト プロパティ:


private $_userName = ’CleverCode’;
ログイン後にコピー

例 4) 定数、すべて大文字、「_」で区切ります:

protected $_userName = ’CleverCode’;
ログイン後にコピー

2.2 データベースの名前

2.2.1 ライブラリの名前

1) 小文字を使用します。 (Windows では大文字と小文字が区別されませんが、Linux では大文字と小文字が区別されます。ライブラリ移植の互換性のため、すべて小文字が使用されます)

2) 「_」で区切られた複数の単語で構成されます。
例:

const TYPE_GZ = 4;
ログイン後にコピー

2.2.2 テーブルの名前付け

1) テーブル名はすべて小文字を使用します。

2) テーブル名には統一されたプレフィックスを使用し、プレフィックスを空にすることはできません (モジュール式であり、MYSQL の予約語を効果的に回避できます)。

3) 複数の単語で構成されるテーブル名には、「_」区切りを使用します。
例:

db_user,db_system。
ログイン後にコピー

2.2.3 テーブルフィールドの名前付け

1)全部使用小写字母命名。
2)多个单词不用下画线进行分割(重要)。
3)如果有必要,给常用字段加上表名首字母作为前缀。
4)避免使用关键字和保留字,但约定俗成的除外。
例如:

username,newsid,userid,logid
ログイン後にコピー

3 注释规范

3.1 文件注释

文件注释通常放在整个PHP文件头部,其内容包括文件版权、作者、编写日期、版本号等
重要信息。PHP中,可以参照phpdocument规范,便于利用程序自动生成文档。
文件注释遵循以下规则:
1)必须包含本程序的描述;
2)必须包含作者;
3)必须包含版权;
4)必须包含文件的名称;
5)可以包含书写日期;
6)可以包含版本信息;
7)可以包含重要的使用说明,如类的调用方法、注意事项等。
例如:

<?php  
  
  
/**  
 * SystemUser.php  
 *   
 * 系统用户操作操作  
 *  
 * Copyright (c) 2015 http://blog.csdn.net/CleverCode  
 *  
 * modification history:  
 * --------------------  
 * 2015/5/11, by Clever Code, Create  
 *
ログイン後にコピー

3.2 类与接口注释

类和接口的注释应该尽量简洁。按照一般的习惯,一个文件只包含一个类,在类注释中通常不需要再加上作者和版本等信息,加上可见性和简中的描述即可。如果文件注释已经足够详细,可以不用给类写注释。如果同时存在接口和接口的实现类,通常做法是仅在接口中进行注释。

3.3 方法和函数注释

方法和函数的注释写在前面,通常需要标明的信息主要是可见性、参数类型和返回值的类
例如1:

/** 
  * 对比新旧数据 
  * 
  * @param bigint $userid 人编号 
  * @param array $oldMap 旧数据 
  * @param array $newMap 新数据(输出参数) 
  * @return string 成功返回&#39;OK&#39;,失败返回错误信息 
  */  
 public static function diffRecommendInfo($userid, $oldMap, &$newMap){  
 }
ログイン後にコピー

例如2:

/** 
  * 插入日志数据 
  * 
  * @param bigint $data[‘userid’] 用户编号 
  * @param array $data[‘logintime’] 登录时间 
  * @return string 成功返回&#39;OK&#39;,失败返回错误信息 
  */  
 public static function insertLogData($data){  
 }
ログイン後にコピー

3.4 Action注释

由于我们都是使用的zend开发模式,在Action是http请求处理逻辑的入口,那么必然会传递get,post等参数。可以注释如下.
例如1)没有get,post传递参数时候:

/** 
     * 自动设置名称 
     * 
     * @return void 
     */  
    public function autosetAction(){  
}
ログイン後にコピー

例如2 )有get传递参数时候:

/** 
     * 获取用户名称 
     * 
     * @get int $userid 用户编号 
     * @get int $currpage 当前页 
     * @get int $pagesize 
     * 
     * @return void 
     */  
public function getusernameAction(){  
}
ログイン後にコピー

例如3) 有post传递参数时候:

/** 
     * 删除用户 
     * 
     * @post int $userid 用户编号 
     * @return void 
     */  
public function deleteuserAction(){  
}
ログイン後にコピー

3.5 单行注释

1)写在被注释代码前面,而不是后面。但对于单行语句,按照习惯可以把注释放在语句末尾,也可以写在行上面。
2)对于大段注释,使用/**/格式,通常在文件和函数注释中使用,而代码内部统一使用//注释,因为其写起来简单。
例如:
//姓名

$name = ’CleverCode’;

4 代码风格

4.1 缩进与空格

在书写代码的时候,必须注意代码的缩进规则:
1)使用4个空格作为缩进,而不使用tab缩进(如在UltraEdit中可以进行预先设置)。
2)变量赋值时,等号左右留出空格。
例如:
$name = 'CleverCode';//推荐
$name='CleverCode';//不推荐

为了最大程度减轻工作量,保持代码美观,建议使用大型IDE管理代码。比如,在zend studio中,使用Ctrl+Shift+F组合键对代码进行格式化。

4.2 语句断行

代码书写中应遵循以下原则:
1)尽量保证程序语句一行就是一句;
2)尽量不要使一行的代码太长,一般控制在80个字符以内;
如果一行代码太长,请使用类似.=的方式断行书写;
执行数据库的SQL语句操作时,尽量不要在函数内写SQL语句,而先用变量定义SQL
语句,然后在执行操作的函数中调用定义的变量。
例如:

//代码分割
$sql= "SELECTusername,password,address,age,postcode from test_t";
$sql.= "WHEREusername=${user}";
$ret = mysql_query($sql);
ログイン後にコピー

3)一个函数控制在200行以内;
4)if最多嵌套3层;
//不推荐

If(){  
    If(){  
        If(){  
            If(){  
                ……  
            }  
        }  
    }  
}
ログイン後にコピー

5)循环最多3层。

//不推荐  
For(){  
    For(){  
        For(){  
            For(){  
                ……  
            }  
        }  
    }  
}
ログイン後にコピー

6)if或者for语句块中只有一行时候,加上{}。当有语句变动的时候会带来不必要的bug。

//推荐  
If($a == 1){  
    echo 1;  
}  
  
//不推荐  
If($a == 1) echo 1;
ログイン後にコピー

4.3 空行

1)函数与函数之间空行。
2)同一个函数不同逻辑块之间空行,查阅不同的逻辑块条理更清晰。


4.4 函数结构

通常一个函数分为三部分。第一部分:检查参数;第二部分:处理逻辑;第三部分:返回结果。
例如:

/** 
 * 删除日志通过uid 
 * 
 * @param string $uid 用户uid 
 * @return string 成功返回&#39;OK&#39;,失败返回错误信息 
 */  
public static function deleteLogByUid($uid){  
  
  
    //第一步:检查参数。防止处理部分异常;比如$uid是传入array();  
    if (!is_numeric($uid)) {  
        return &#39;!is_numeric($uid)&#39;;  
    }  
      
    //第二步:处理逻辑。  
    $affected = $userLogTable->delete(&#39;where userid = &#39; . $uid);  
      
    //第三步:返回结果。让调用者知道是否处理正常。  
    if($affected){  
        return &#39;OK&#39;;  
    }  
      
    return &#39;delete error!&#39;;  
}
ログイン後にコピー

4.5 函数返回函数

需要客户端的函数:
返回值

$ret = array(‘code’=> 1 ,msg=>’’,data => array());
ログイン後にコピー

4.6 更好的习惯

在代码中,使用下面列举的写法,可以使代码更优雅。
1)多使用PHP中已经存在的常量,而不要自己定义,例如:

echo$meg."\r\n";
echo$msg,PHPJEOL;
ログイン後にコピー

PHP中,PHP_EOL是一个预定义常量,表示一行结束,随着所使用系统的不同,使用PHP_EOL会让代码更具有可移植性。

2)更详尽的注释。
注释是一门艺术,好的注释可以比代码更精彩。不用担心效率问题。一则注释对代码的效
率影响不大,其次在正式产品中可以对代码中的注释进行批量删除。注释做到极致和完美的典型代表是Apache组织各种产品的源代码。

3)不要滥用语法糖。
语法糖也就是语言中的潜规则,即不具有普遍代表性的语法。少量使用语法糖会尝到甜
头,大量使用则是一种灾难。
例如以下代码,可读性比较差;

$a?$a-$b:3&&$c&&$d=1;
ログイン後にコピー

以上がコーディング標準に関する PHP ドキュメント (コレクション)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!