読者です 読者をやめる 読者になる 読者になる

PEARのコーディング規則を身につける


自分の好きなように書くのもいいけど、仕事で書く場合は周りに読みやすいように書かないとねってことでPEARのコーディング規則を勉強します。
Manual :: 標準コーディング規約

インデント

  • 空白 4 つのインデントを使用しタブは使用しない

Vim使いは以下の設定を.vimrcに書きましょう。

set expandtab
set shiftwidth=4
set softtabstop=4
set tabstop=4
  • およそ半角 75-85 文字ごとに改行して、可読性を確保することが推奨されている

この辺はあまりにも長くならなければ大丈夫だと思います。

制御構造

  • 関数コールと区別するため、 制御キーワードと開きカッコの間に空白を 1 つ置く
  • 構文的に省略可能な場合でも、波カッコを使用することを推奨

波カッコというんですね。今まで中カッコと言っていました。

  • if文
<?php
if ($condition === true) {
    echo 'hello';
} else {
    echo 'bye';
}
?>
  • switch文
<?php
switch ($condition) {
case 1:
    echo 'one!';
    break;

case 2:
    echo 'two!';
    break;

default:
    echo 'other!';
    break;

}
?> 

関数コール

  • 関数名・開きカッコおよび最初のパラメータそれぞれの間には空白を置かない
  • カンマとパラメータ間には空白を置く
  • 最後のパラメータと閉カッコ およびセミコロンの間には空白を置かずにコールする
<?php
$var = hoge($one, $two, $three);
?> 
  • 関連する一連の代入文については、 可読性を向上させるために空白を複数置いても良い
<?php
$short         = foo($bar);
$long_variable = foo($baz);
?> 

スペースをいちいち自分で入力するのは面倒なので、vim使いの方は、
高性能なテキスト整形ツールAlignの使い方 — 名無しのvim使い
を使うとコマンド一発で整形してくれちゃいます!
かなり便利なので一度使ってみることをおすすめします!

クラス定義

  • クラスの宣言時には、いったん改行した後に開始波カッコをつける
 <?php
class Foo_Bar
{

    //... コードをここに書きます

}
?>

関数定義

  • "K&R スタイル"にしたがう

このスタイルでは、ブロック開始の中括弧を制御文と同じ行に置き、ブロック内の文を字下げして記し、ブロックを閉じる中括弧を制御文と同じ字下げ位置に戻して記す(その行は中括弧が先頭になる)。関数はそれとは異なり、関数の定義の最初の中括弧は宣言の次の行の先頭に記され、宣言と同じ字下げレベルとなる。

字下げスタイル - Wikipedia
<?php
function fooFunction($arg1, $arg2 = '')
{
    if (condition) {
        statement;
    }
    return $val;
}
?> 
  • デフォルト値を有する引数は、引数リストの終わりに置く
  • 適切でない場合を除き、関数は、意味のある値を返すようにする
<?php
function connect(&$dsn, $persistent = false)
{
    if (is_array($dsn)) {
        $dsninfo = &$dsn;
    } else {
        $dsninfo = DB::parseDSN($dsn);
    }

    if (!$dsninfo || !$dsninfo['phptype']) {
        return $this->raiseError();
    }

    return true;
}
?> 

コメント

  • phpDocumentorの規則に従う

phpDocumentor 2

  • インラインドキュメント以外のコメントを書くことも推奨

一般的な目安として、 コードのある部分を見て「言葉だけで説明したくないな」と思うような場合には、 処理内容を忘れてしまう前にコメントを追加する必要がある。

コメントはできるだけ多く記述したほうがいいと思います。

コードの読み込み

  • クラスファイルを無条件で読み込む場合は、 require_once() を使用
  • クラスファイルを条件付きで読み込む場合(たとえば、factory メソッド)は、 include_once() を使用

PHP コードタグ

  • 短縮型の ではなく、 かならず を使用

ヘッダコメントブロック

  • 各ファイルの先頭に "ページレベル" のコメントブロックを、 各クラスの直前に "クラスレベル" のコメントブロックを記述

コメントに関しては所属している部署なりのソースを真似るのがベストですかね。
phpdocの規則に順していないところもあるでしょうし。

 <?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Short description for file
 *
 * Long description for file (if any)...
 *
 * PHP versions 4 and 5
 *
 * LICENSE: This source file is subject to version 3.0 of the PHP license
 * that is available through the world-wide-web at the following URI:
 * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
 * the PHP License and are unable to obtain it through the web, please
 * send a note to license@php.net so we can mail you a copy immediately.
 *
 * @category   CategoryName
 * @package    PackageName
 * @author     Original Author <author@example.com>
 * @author     Another Author <another@example.com>
 * @copyright  1997-2005 The PHP Group
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
 * @version    CVS: <?php
$
?> Id:$
 * @link       http://pear.php.net/package/PackageName
 * @see        NetOther, Net_Sample::Net_Sample()
 * @since      File available since Release 1.2.0
 * @deprecated File deprecated in Release 2.0.0
 */

/*
* Place includes, constant defines and $_GLOBAL settings here.
* Make sure they have appropriate docblocks to avoid phpDocumentor
* construing they are documented by the page-level docblock.
*/

/**
 * Short description for class
 *
 * Long description for class (if any)...
 *
 * @category   CategoryName
 * @package    PackageName
 * @author     Original Author <author@example.com>
 * @author     Another Author <another@example.com>
 * @copyright  1997-2005 The PHP Group
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
 * @version    Release: @package_version@
 * @link       http://pear.php.net/package/PackageName
 * @see        NetOther, Net_Sample::Net_Sample()
 * @since      Class available since Release 1.2.0
 * @deprecated Class deprecated in Release 2.0.0
 */
class Foo_Bar
{
}

?> 

命名規約

グローバル変数および関数
  • グローバル変数を定義する場合は、 変数名の先頭はアンダースコアで始め、 その後にパッケージ名を続けてさらにもうひとつアンダースコアをつける
  • グローバル関数の名前は "studly caps" 形式(大文字で最初の小文字の部分と分けるという意味)
  • パッケージ名を先頭につけることで パッケージ間での名前の競合を回避する
  • 最初の文字は小文字とし、 その後は単語の先頭の文字のみを大文字とする
$_PEAR_destructor_object_list
クラス
  • クラスには、内容が理解できるような名前を指定するべき
  • 略語の使用は可能なかぎり避ける
  • クラス名は、常に大文字で始める
Log Net_Finger HTML_Upload_Error
クラス変数およびメソッド
  • クラス変数 (プロパティ) およびメソッドの名前は "studly caps" 形式

以下は、publicなメンバ

$counter connect() getData() buildSomeWidget()
  • プライベートなクラスメンバは、 アンダースコア 1 つを前に付ける
$_status _sort() _initTree()
  • プロテクテッドなクラスメンバには、 前にアンダースコアを付けない
protected $somevar protected function initTree()
定数
  • すべて大文字で記述し、単語の区切りにはアンダースコアを 使用す
  • 使用されるクラス/パッケージを大文字で表した名前を 定数の接頭辞として付加
DB_DATASOURCENAME SERVICES_AMAZON_S3_LICENSEKEY
  • true, false および null は例外で、すべて小文字で記述

まとめ

ほぼ参考サイト丸写しになってしまいました・・・
載せないのも寂しいので一応載せておきます