PHPのクラスについての初学者向け記事です( 厂˙ω˙ )厂
クラスとは
定数・変数・関数などを記述することができます。
複数の処理をまとめておく部屋、みたいな感じ。namespace(名前空間)と合わせて覚えるとよいです。
PHP書き始めた頃は「クラスって必要なの?ディレクトリと違うの?」と思っていたんですけど、規模が大きくなったりフレームワークを使ったりするには必要なんですよね。
書き方
<?php
class Hoge
{
protected $hoge;
public function __construct(string $hoge)
{
$this->hoge = $hoge;
}
・・・
public function greeting(string $name)
{
echo 'Hello, '. $name;
}
}
class XX
という部分がクラス名です。(ここではHoge
)
宣言の前にprotected
やpublic
とついているのは、クラス外からのメソッドや変数へのアクセス権を表します。
public
や protected
の場合、クラス内ではお互いに $this
を使って呼び出すことが出来ます。
__construct()
メソッドは、クラスを呼び出すときに必ず最初に実行される処理です(コンストラクタと呼びます)。
コンストラクタに引数を設定することも出来ます。
上記では省略していますが、コンストラクタでセットした値( $this->hoge
)はクラス内のメソッドで使われます。
クラスの呼び出し
クラスは、他の場所から呼びだして使うことが出来ます。
呼び出す際に新たにクラスのコピーを生成して使います。聞きなれない言葉ですが、コピーしたものを「オブジェクト」や「インスタンス」と呼び、コピーして生成することを「インスタンス化」と言います。
$hoge_class = new Hoge('hoge');
echo $hoge_class->greeting('Tom'); // 'Hello, Tom'
new
するとインスタンス化できます。 $hoge_class
の中にHogeクラスのコピーが入ります。
->
というアロー演算子でHogeクラスのメソッドを呼び出します。(publicの場合)
※アクセス権については、長くなるのでまた別記事で書ければと。。
なぜクラスを書くのか
require
や include
を利用して別ファイルのメソッドを呼び出すことも出来ますが、どこから呼び出した何に使うメソッドなのかが視認しづらくなります。
設計の話も含んできますが、メソッドがどんな働きをするのか、どの部分に属しているかなどを示す手がかりになります。(と、私は認識しています。)
有名な設計の考え方である「オブジェクト指向」についても絡めたいのですが、かなーり深い話になるので参考リンクを。
オブジェクト指向って結局なんだ?!って悩んだ時に何度も読ませてもらった記事です。
いつか自分の言葉でオブジェクト指向をまとめたい。。
クラスの命名
クラス名の命名ルールは、プロジェクト内では統一するのが良いです。例えば、
- クラス名は大文字から始める
- 「HogeContoller」、「HogeModel」など機能名を持たせる
- 「Users」「Articles」など複数形にする
などです。フレームワークによってはルールに乗っ取らないと正しく動作しない場合もあるので注意が必要です。
クラス名の命名から少し外れますが、ルールがよくわからない場合はコーディング規約を参照してみましょう。
psr-2に準拠することが多いです。