「PHP言語」の「クラス」の作り方と使い方

PHP言語での「クラス・オブジェクト」について学んでいきたいと思います。

「C++言語」で「オブジェクト指向」について学んでいきましたが、PHPも「オブジェクト指向」の言語とのことで、「クラス」の作り方や仕組みについて学んでいきたいと思います。

「WEBアプリケーション」開発で「どのようにクラスが利用されていくのか?」が気になるのと、「ユーザーが送信したデータ」が、「どのようにクラスの中で利用されているのか?」を理解していきたい。

まだまだ理解不足のところもあるので、「オブジェクト指向」について勉強していきたいと思います。

「クラス」の作り方

PHPで「クラス」を作るには、

class クラス名 {
    // プロパティ・メソッドの定義
}

という形式で書いていきます。

例えば、「衣料品」を表すクラスを作ってみると、

class Clothing {
    public $type;   //衣料品の種類
    public $color;  //衣料品の色

     // 衣料品の情報を表示
    public function displayClothing(){
        print 'この衣料品は「' . $this->type . '」で、色は「' . $this->color . '」です。';
    }
}

のようになります。

いろいろと調べながら作っていったのですが、思いのほか「C++言語」と書き方が似ていました。

クラスのメソッド内の「$this」はクラスの「インスタンス自身」を表す書き方とのことで、今回は「服の種類」と「色」を出力するメソッドを作りました。

「プロパティ」は、クラスの中に用意した「変数のようになもの」で、「メソッド」はクラスの中に作った「関数のようなもの」みたいです。

このクラスを利用したプログラムを作ってみると、

$clothing = new Clothing();

$clothing->type = 'T-shirt';
$clothing->color = 'white';

$clothing->displayClothing();

のとうになります。

このプログラムを実行すると、

この衣料品は「T-shirt」で、色は「white」です。

のように表示されます。

アクセス修飾子

「プロパティ名・メソッド名」の前についているのが「アクセス範囲」を表す「修飾子」で、

public
クラス外部からアクセス可能
private
クラス内部からのみアクセス可能
protected
クラスの内部と自クラスを継承したクラスからのみアクセス可能

のように「アクセス範囲」が定められています。

「private」指定をすると外部からアクセスできなくなってしまいますが、「非公開のプロパティ」にすることで、プロパティのデータをより安全な状態にすることができます。

ここでも「カプセル化」の考え方を適用できるので、「ゲッター・セッター」を利用したプログラムを作ってみたいと思います。

「カプセル化」の考え方は、

→「「C++言語」の「カプセル化」とクラスへの「アクセス権限」について学ぼう!!」

で解説していますので、こちらをご参照ください。

「カプセル化」を利用したPHPプログラム

「カプセル化」を利用したプログラムを作ってみると、

class Human {
    private $name = '';   // 名前
    private $gender = ''; // 性別

    function getName(){
        return $this->name;
    }

    function setName($name){
        // 値の確認
        if( $name !== ''){
            $this->name = $name;
        }
    }

    function getGender(){
        return $this->gender;
    }

    function setGender($gender){
        if( $gender === '男' || $gender === '女'){
            $this->gender = $gender;
        }
    }

    function display(){
        print '名前は「' . $name . '」で、性別は「' . $gender . '」です。';
    }
}

のようになります。

このクラスを利用するプログラムを作り、

$member_1 = new Human();

$member_1->display();

// 「正常な値」を設定
$member_1->setName('サトル');
$member_1->setGender('男');

$member_1->display();

// 「異常な値」を設定
$member_1->setName('');
$member_1->setGender('不明');

$member_1->display();

のように「初期値」の設定は「正常な値」を入力をして、次に「異常な値」を入力してみました。

すると、

名前は「」で、性別は「」です。
名前は「サトル」で、性別は「男」です。
名前は「サトル」で、性別は「男」です。

最後に入力した「異常な値」は、セッターの「値のチェック」で引っかかって、「異常な値」は設定されていないのがわかりますね。

このように「プロパティの値」を「カプセル化」によって守ることができます。

「static」なプロパティ

プロパティ名とメソッド名の前に「staic」キーワードを付けることで、プロパティがクラスに所属するようになります。

例えば、

class Television {
    public static $channels_count = 10; // チャンネル数

    public static function getChannelsCount(){
        return self::$channels_count;
    }
}

このプログラムを実行するには、

print 'テレビのチャンネル数=' . Television::getChannelsCount();

のように書きます。すると、

テレビのチャンネル数=10

のように表示され、「static」で作ったメソッドを実行できていることが確認できました。

インスタンスを作らなくても「プロパティやメソッド」を利用できるのは便利ですね。

次にインスタンスを初期化する方法について見ていきたいと思います。

「コンストラクタ」と「デストラクタ」

PHP言語でも「コンストラクタ」を作ることで、インスタンスを作成した際に「初期化処理」を行うことができます。

クラスの中に、

function __construct(引数1,引数2・・・){
    // 初期化処理
}

のようにコンストラクタを作成します。

そして、インスタンスを削除した時に処理を実行したい場合は、「デストラクタ」を作成します。

function __destruct(){
    // インスタンス削除時に実行する処理
}

実際にこの2つが実行できるのかを確かめるために、

class Test {
    function test(){
        print 'test
'; } function __construct(){ print '「コンストラクタ」を実行しました。
'; } function __destruct(){ print '「デストラクタ」を実行しました。
'; } }

のようにクラスを作成し、


$test = new Test();
$test->test();

のように書いてプログラムを実行してみました。

実行結果は・・・

「コンストラクタ」を実行しました。
test
「デストラクタ」を実行しました。

のように表示され、ちゃんと「コンストラクタ」と「デストラクタ」が実行できていることが確認できました。

PHPスクリプトの実行が終了すると自動的にインスタンスが消去されているんですね。なるほど。

では、次回はまたクラスの機能について勉強していきたいと思います。

→(前へ)「PHP言語」の「関数」の作り方と「便利」な関数の使い方を学ぼう!

→(次へ)「PHP言語」の「継承・オーバーライド・抽象クラス」を学んでみた

→「Twitter:@satoru78888」

HOMEへ