PHP入門

【PHP入門】クラス(class)の使い方

2021年6月25日

はじめに

前回の記事では、変数のスコープ(ローカル変数、グローバル変数、静的変数)について紹介しました。

本記事では、PHPのクラスについて紹介します。

クラスとは

クラスとは、メソッド(関数)やプロパティ(変数)をまとめたもの(関数と変数を持ったプログラムの固まり)です。

次の例では、Cat(猫)の情報を管理するクラスを作成しています。クラスには、メソッドとプロパティを記述できます。

PHPのクラス

オブジェクトの生成(インスタンスの生成)

クラスを使用するには「new」キーワードを使用します。「new クラス名」でクラスのオブジェクトを生成(インスタンスの生成ともいいます)することでクラスを使用できます。

スポンサーリンク

例えば「Cat」クラスを使うには、次のように「Cat」クラスのオブジェクトを生成します。

$cat = new Cat();

そして、Catクラスにあるメソッドやプロパティは、クラスのオブジェクトの後に「->」をつけることで参照できます。(※静的プロパティと静的メソッドにアクセスするときは「::」を使用)

[クラス内のプロパティを参照する例]

$cat->name

[クラス内のメソッドを呼び出す例]

$cat->cry()
「->」はアロー演算子、「::」はスコープ定義演算子といいます。

クラスの使用例

それでは、実際にPHPのプログラムでクラスの使い方を紹介します。

次の例では、Catクラスのオブジェクトを生成し、Catクラスのプロパティ「$name」を参照、そして Catクラスのメソッド「cry()」を実行しています。

[クラスの使用例]

<?php

// 猫の情報を管理するクラス
class Cat
{
    // プロパティの宣言
    public $name = "ミー";

    // メソッドの宣言
    public function cry() {
        return "ニャー";
    }
}

// インスタンス生成
$cat = new Cat();
// プロパティの呼び出し
print "猫の名前:".$cat->name."<br />";
// メソッドの呼び出し
print "猫の鳴き声:".$cat->cry();

?>

[実行結果]

猫の名前:ミー
猫の鳴き声:ニャー

アクセス権

メソッドやプロパティには、次のアクセス権を指定できます。

アクセス権説明
publicどこからでもアクセス可能
protectedクラス内とサブクラスからのみアクセス可能
privateクラス内からのみアクセス可能

例えば、次のクラス「Sample」内にあるプロパティ「$name」は「public」で定義しているため、外部から参照できます。

<?php

class Sample
{
    public $name = "名前";
}

$obj = new Sample();
print $obj->name;  // publicで定義しているため、参照できる

?>

しかし、次の例ではプロパティ「$name」は「private」で定義しているため、外部から参照できません。

<?php

class Sample
{
    private $name = "名前";
}

$obj = new Sample();
print $obj->name;  // privateで定義しているため、参照できない(エラーになる)

?>

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

クラスを使用するには「new」キーワードを使用して、クラスのオブジェクトを生成(インスタンスを生成)します。

スポンサーリンク

このクラスを「new」したタイミングで動き出す特別なメソッドのことをコンストラクタといい、「__construct」メソッドを使用します。

そして、オブジェクトを作るタイミングで動き出すコンストラクタとは逆で、オブジェクトが消滅するときに動き出す特殊なメソッドのことをデストラクタといい、「__destruct()」メソッドを使用します。

コンストラクタとデストラクタは省略可能ですが、定義することでコンストラクタはオブジェクトを使用する前に必要な初期化デストラクタは後始末の処理を書くことができます。

コンストラクタとデストラクタの使用例

それでは、実際にPHPのプログラムでコンストラクタとデストラクタの使い方を紹介します。

[コンストラクタとデストラクタの例]

<?php

class ConstructSample
{
    // コンストラクタ
    public function __construct() {
        print "コンストラクタが動く<br />";
    }

    // デストラクタ
    public function __destruct() {
        print "デストラクタが動く";
    }

    public function test() {
        print "testメソッドが動く<br />";
    }
}

// インスタンス生成
$obj = new ConstructSample();
$obj->test();

?>

[実行結果]

コンストラクタが動く
testメソッドが動く
デストラクタが動く

上記例では、オブジェクトが生成されたタイミングでコンストラクタが動き、メソッド「test()」を実行、その後 オブジェクトが参照されなくなった(消滅するとき)タイミングでデストラクタが動作しています。

引数ありのコンストラクタ

コンストラクタには引数をつけることもできます。

[引数ありのコンストラクタの例]

<?php

class ConstructSample
{
    public $id;
    public $name;

    // コンストラクタ
    public function __construct($id, $name) {
        $this->id = $id;
        $this->name = $name;
    }

    public function output() {
        print $this->id.":".$this->name;
    }
}

// インスタンス生成
$obj = new ConstructSample("1", "名前");
$obj->output();

?>

[実行結果]

1:名前
クラス内のメソッドやプロパティを使うときは「$this->id」のように「$this」を使います。

終わりに

本記事では、PHPのクラスについて紹介しました。

次回の記事では、継承とオーバーライドについて紹介します。

helpful