PHP Manual

変数、関数、メソッド、クラスの名前の付け方

22. 08. 2019

Obsah článku

コードの秩序を保つためには、名前の由来を明確にルール化することが重要です。このページでは、私や一緒に仕事をしている人たちを含め、多くのプログラマーが使っている比較的一般的なアプローチを紹介します。

開発チームに所属している人は、ぜひそのルールを使ってください。しかし、一般的な開発では、いくつかの良い習慣を確立することが有益です。

PHPの構文全体の概念は本当に広いので、ここでのガイドは専門性の高い多くのカテゴリーに分けました。

手っ取り早く解決したい場合は、PSR-4規格を勉強することをお勧めします。

スクリプトの挿入、HTMLへのリンク、ファイルの読み込み

各スクリプトは <?php タグで始まる必要があります。

ファイルの末尾にHTMLがない場合は、終了させない(ページの末尾に白文字が入るのを防ぐため)。

その他のファイルの読み込みは、以下のルールに従ってください。

  • もしファイルが重要ではなく、ページをレンダリングする際に処理できるものであれば (例えば、フッターの追加情報)、 include: include 'file.php'; で読み込まれるべきです。
  • クリティカルなファイルは、require 構文でのみ実行できます。
  • オブジェクトを扱う場合は、require構文を使ってオートローダを読み込みます。オートローダは他のクラスの読み込みを自ら行います(ほとんどのフレームワークでこの動作が実装されています)。

もし少しでも可能であれば、データ取得のロジックとHTMLへのレンダリングを分離する、つまりMVCモデル(モデル - ビュー - コントローラー)を使用するべきだ。

そこで、まず、例えばPresenterでデータを用意します。

Presenter.php

$cisla = [1, 2, 3];
$data = [];
$data['計数'] = $cisla; // テンプレートにデータを渡す
include 'renderCisel.php'; // テンプレートを読み込む

そして、それをテンプレートに描きます。

renderCisel.php

<table>
<?php
foreach ($data['cisla'] as $cislo) {
echo '<tr><td>' . $cislo . '</td></tr>';
}
?>
</table>

この方法は、ほとんどのフレームワークで採用されており、コードの明瞭性を高めるために有効です。開発プロセスの後半では、明確に構造化されたアプリケーションを開発したい経験豊富なプログラマーなら誰でもこの方法を使うはずです(大規模なアプリケーションではこの方法は必須です)。

変数名

変数に値の配列などが含まれる場合は、複数形で命名する必要があります。

$numbers = [1, 2, 3];

なぜなら、そうすれば、単純に一つの数値で値を反復することができるからです。

foreach ($numbers as $number) {
// 数値処理
}

複数の単語からなる名前は、cameCase構文で1つの長い単語にまとめられます。つまり、最初の単語は小文字で始まり、後続の各単語は大文字になります。

$promenna = 'おい、おい!';
$seznamUzivatelu = [
'ヤン・バラシェック',
'バラク・オバマ',
'スティーブ・ジョブズ',
'スティーブン・ウルフラム',
];
$maxFilesInDirectory = 12;
$nameOfPhpScript = 'index.php'; // PHPの略語が縮小されました。

関数名、メソッド名

関数やメソッドは、常にその名前で何を行うかを明確にする必要があります。多くの場合、予想される入力パラメータと戻り値も名前に含めることができます。

次の関数が何を行い、その戻り値が何であるかを推測してみてください。

getUserById($id);
saveErrorToLog($message);
createDefaultDirectory($path);
setAuthors(['ヤン・バラシェック', 'チャック・ノリス']);
getCurrentTime();

全てのトリックは名前の最初の言葉にあり、その関数がどのメソッドを使用するかを明確にすることです。通常、次のような慣例があります。

  • get - データを配列あるいはオブジェクトとして取得し、入力パラメータで検索対象のエンティティを指定します。
  • save - ファイルやデータベースに保存する。
  • create` - エンティティを作成する (例えば、オブジェクトのインスタンスを作成する)
  • set` - 定義済みの変数にデータを保存します (関数内部)

クラス名

クラスは多数のプロパティとメソッドを含む大きな存在なので、これも大文字で始める必要があります。また、クラスは1つの実体を運ぶ(そしてその特性を記述する)だけでよいので、単数形の名前を付ける必要があります。複数のエンティティを扱う必要がある場合は、各インスタンスを配列に格納すればよい。

class User
{
public string $username;
public string $password;
public string $role;
}
class Users
{
/** @var ユーザー[] */。
public array $users;
public function addUser(User $user): void
{
$this->users = array_push($this->users, $user);
}
}

User** クラスは、ある特定のユーザーに関する情報のみに特化したクラスです。複数のユーザーで作業したい場合は、特定のエンティティのインスタンスの配列を運ぶ別のクラス(envelope)を作成します。

また、ファクトリーは、類似のオブジェクトを簡単に作成し、元のインスタンスを再利用することで、システムリソースを節約しながら、より明確なコードを実現することができるため、しばしばこのような用途に利用されます。

名前空間 - 名前空間

Namespaceはスクリプトが利用できる物理的なディレクトリとは独立していますが、少なくとも部分的にプロジェクトのレイアウトを尊重することは良い習慣です(この方がより曖昧さのない新しい名前を作成するための良いシステムにつながります)。

私自身は、そのタイプのクラスの共通サブディレクトリにしたがって名前空間を命名しています。

App\Presenters; // 発表者全員の名前です。
App\Model; // これは一般的なモデルの名前である
App\Model\Math; // これは数学と連動するモデルの名前です。

クラスの適切なオートロードのためには、PSR-4規格に従うのがよいでしょう。

カスタムコンベンション(企業チーム内など)

あなたの名前は?この記事を改善するためのヒントをお願いします。

しかし一般的には、チーム内でカスタム規約を設けることはあまり意味がありません。なぜなら、他のフレームワークにコードを移植するのが難しくなり、新しい同僚を雇ったときに現在の規約を学ばなければならないからです。そのため、「PSR-4」の規格に従うのがベストです。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
2.
Status:
All systems normal.
2024