49
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

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

宣言の前にprotectedpublicとついているのは、クラス外からのメソッドや変数へのアクセス権を表します。
publicprotected の場合、クラス内ではお互いに $this を使って呼び出すことが出来ます。

__construct()メソッドは、クラスを呼び出すときに必ず最初に実行される処理です(コンストラクタと呼びます)。
コンストラクタに引数を設定することも出来ます。

上記では省略していますが、コンストラクタでセットした値( $this->hoge )はクラス内のメソッドで使われます。

クラスの呼び出し

クラスは、他の場所から呼びだして使うことが出来ます。

呼び出す際に新たにクラスのコピーを生成して使います。聞きなれない言葉ですが、コピーしたものを「オブジェクト」や「インスタンス」と呼び、コピーして生成することを「インスタンス化」と言います。

$hoge_class = new Hoge('hoge');
echo $hoge_class->greeting('Tom'); // 'Hello, Tom'

new するとインスタンス化できます。 $hoge_class の中にHogeクラスのコピーが入ります。
-> というアロー演算子でHogeクラスのメソッドを呼び出します。(publicの場合)

※アクセス権については、長くなるのでまた別記事で書ければと。。

なぜクラスを書くのか

requireinclude を利用して別ファイルのメソッドを呼び出すことも出来ますが、どこから呼び出した何に使うメソッドなのかが視認しづらくなります。
設計の話も含んできますが、メソッドがどんな働きをするのか、どの部分に属しているかなどを示す手がかりになります。(と、私は認識しています。)

有名な設計の考え方である「オブジェクト指向」についても絡めたいのですが、かなーり深い話になるので参考リンクを。
オブジェクト指向って結局なんだ?!って悩んだ時に何度も読ませてもらった記事です。

PHPオブジェクト指向入門(前半)

いつか自分の言葉でオブジェクト指向をまとめたい。。

クラスの命名

クラス名の命名ルールは、プロジェクト内では統一するのが良いです。例えば、

  • クラス名は大文字から始める
  • 「HogeContoller」、「HogeModel」など機能名を持たせる
  • 「Users」「Articles」など複数形にする

などです。フレームワークによってはルールに乗っ取らないと正しく動作しない場合もあるので注意が必要です。

クラス名の命名から少し外れますが、ルールがよくわからない場合はコーディング規約を参照してみましょう。
psr-2に準拠することが多いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
49
Help us understand the problem. What are the problem?