Ext JSやRapid Driveなど
システム開発の技術情報をご紹介。

お問い合わせ 資料請求 無料見積り

お電話でお気軽にお問い合わせくださいTel 03-6805-2904 営業時間 [平日]AM 9:30 - PM 6:30

クラス

クラスについて

クラスを生成する

クラスを定義する

クラスは、注)プロパティ(メンバ変数)注)メソッドから構成されます。プロパティ=変数、メソッド=関数と考えると分かり易いかもしれません。

クラスの定義には、classというキーワードを使用し、続けて定義するクラス名を指定します。クラス名を指定したら、そのクラスのプロパティ(メンバ変数)と、メソッドを定義します。

注)プロパティ(メンバ変数)とは・・・

クラスで表現したいオブジェクトの「パラメータ」を格納するための変数にあたります。例えば、私たち「人間」をクラスとすると、「性別」、「年齢」、「血液型」がプロパティにあたります。

注)メソッドとは・・・

機能を実現するための関数にあたります。メソッドは一般の関数とは異なり、あくまでクラスのオブジェクトの中でのみ有効になります。例えば、私たち「人間」をクラスとすると、「食べる」、「走る」、「寝る」がメソッドにあたります。

クラスを作る
<?php
    // クラスsansuを定義する
    class sansu {

        // プロパティを定義する
        var $result;

        // メソッドkakezanを定義する
        function kakezan( $number ) {

             return $this->result = $number * 100;
        }
    }

    // インスタンスを作成する
    $jsansu = new sansu;

    echo $jsansu->kakezan( 7 );
?>

上記のスクリプトでは、classというキーワードに続けてsansuというクラス名を指定しています。次に、注)varを付けてプロパティを定義し、クラス全体で使用できるようにします。

メソッドkakezanを定義している中に、「$this->result」と記述ありますが、これはsansuクラス内からresultプロパティを呼び出す、という意味です。「$this->」は、自分自身を表し、「$this->プロパティ名」で同一クラス内からプロパティを呼び出すことができます。

実行結果
700
注)varについて

プロパティを定義するときには、プロパティ名だけでなく、アクセス制限設定も同時に行うことができます。アクセス制限とは、PHP5から新たに導入されたもので、プロパティがクラス外からアクセス可能かどうかを決定するものです。PHP5では、プロパティの定義にvarを使用せずに、「public」、「private」、「protected」の修飾子を使用することが推奨されています。なお、アクセス制限の指定を省略した場合は、publicを指定したとみなされます。

プロパティのアクセス制限設定
修飾子説明
publicどこからでもアクセス可能
protected同一クラスおよび派生クラスからアクセス可能
private同一クラスからのみアクセス可能
インスタンスの作成と利用

作成したクラスを実行するには、注)インスタンスを作成しなければなりません。インスタンスを作成するには、newというキーワードを使います。

注)インスタンスとは・・・

インスタンスとは、クラスから生成されるデータ群のことです。クラスは定義が書かれているだけの雛型のようなもので、インスタンスを生成することで、実際にデータを扱うことが可能になります。人間クラス(人間という集合)のインスタンス(実例、実際の要素)はAさん、というような感じになります。

// インスタンスを作成する
$jsansu = new sansu;

上記の定義により、$jsansuがインスタンスとなります。そして、この$jsansuを使用して、クラスで定義したプロパティやメソッドを利用します。

echo $jsansu->kakezan( 7 );

つまり、kakezanメソッドを呼び出すには、自分自身を表す->という記述を用いて、上記のように記述します。

クラスを継承する

継承から新しいクラスを作成する

継承とは、あるクラスのプロパティ、メソッドを引き継ぐことをいいます。継承により新しく作成されたクラスでは、継承されたクラスから引き継いだプロパティ、メソッドを定義しなくても使用することができます。

継承によって新しく作成するクラスをサブクラス(子クラス、派生クラス)、それに対して継承される側のクラスをスーパークラス(親クラス、基底クラス、基本クラス)と呼びます。

継承からkeisyou_sansuクラスを作成する
<?php

    // クラスsansuを定義する
    class sansu {

        // プロパティを定義する
        var $result;

        // メソッドkakezanを定義する
        function kakezan( $number ) {

             return $this->result = $number * 100;
        }
    }

    // sansuクラスを継承する
    class keisyou_sansu extends sansu {

        var $result2;
        var $result3;
        var $result4;

        function tashizan( $number ) {

            return $this->result2 = $number + 100;
        }

        function hikizan( $number ) {

            return $this->result3 = $number - 100;
        }

        function warizan( $number ) {

            return $this->result4 = $number / 100;
        }
    }

    // インスタンスを作成する
    $jsansu = new keisyou_sansu;

    echo $jsansu->kakezan( 5 ), "<br />n";
    echo $jsansu->tashizan( 7 ), "<br />n";
    echo $jsansu->hikizan( 300 ), "<br />n";
    echo $jsansu->warizan( 200 ), "<br />n";

?>

上記のスクリプトでは、作成したsansuクラスを、extendsというキーワードで継承して、keisyou_sansuというサブクラスを作成しています。続けて、継承した掛け算メソッド、kakezanに加えて、足し算(tashizan)、引き算(hikizan)、割り算(warizan)が行えるメソッドを定義しています。

実行結果
500
107
200
2

「$jsansu = new keisyou_sansu;」でクラスのインスタンスが作成され、「tashizan」、「hikizan」「warizan」が使用可能になり、「$jsansu->kakezan( 5 )」、「$jsansu->tashizan( 7 )」、「$jsansu->hikizan( 300 )」、「$jsansu->warizan( 200 )」から()内の数字が計算されています。その計算結果がそれぞれ、「500」、「107」、「200」、「2」となっています。