PHPのクラスの仕組みとサンプルです。
目次
説明 | クラスとは |
クラスからオブジェクト(インスタンス)を生成する | |
クラスからオブジェクト(インスタンス)を生成しない |
クラスとは
[修飾子] class クラス名 { フィールド メソッド } |
- クラスは、フィールド(データ)とメソッド(処理)を定義できます。
- フィールドは、メンバ変数、プロパティ、属性とも呼びます。
- メソッドは関数とも呼びます。
- クラスは設計図や型枠のイメージです。
クラスのサンプルです。ファイル名は、Color.phpです。
<?php
class Color
{
private $name; //変数
public function setName($name){ //メソッド
$this->name = $name;
}
public function getName(){ //メソッド
return $this->name;
}
}
?>
4行目は、クラスのメンバ変数(プロパティ)です。
privateは、クラスの外部からアクセスできません。
6,9行目は、クラスのメソッド(関数)です。
publicは、クラスの外部からアクセスできます。
7,10行目の$this->は、自クラスの変数や関数を指定します。
7行目は、引数($name)の値を、自クラスのメンバ変数($this->name)にセットします。
10行目は、自クラスのメンバ変数($this->name)の値をメソッドの呼び出し元に返します。
クラスからオブジェクト(インスタンス)を生成する
クラスを利用する場合、クラスからオブジェクトを生成する場合と生成しない場合があります。
クラスからオブジェクトを生成する場合は、new演算子を使用してオブジェクト(インスタンス)を生成します。インスタンス化といいます。
変数 = new クラス名(); //クラスからインスタンスを生成 |
上記の図はクラスからオブジェクト(インスタンス)を3つ生成したときのイメージです。
オブジェクトごとにデータを管理できます。
例えると、クラスは設計図、型枠でインスタンスは実体です。
以下は、クラスからオブジェクトを生成して利用するサンプルです。
上記「クラスのサンプル」のColorクラスからオブジェクトを生成します。
<?php
require "Color.php";
//インスタンスを生成
$cr1 = new Color();
$cr2 = new Color();
$cr3 = new Color();
//インスタンスのメソッドを使用
$cr1->setName("赤");
$cr2->setName("黄");
$cr3->setName("青");
print $cr1->getName(); //赤
print $cr2->getName(); //黄
print $cr3->getName(); //青
?>
2行目は、上記のColor.phpファイルを読み込んでいます。
5~7行目は、Colorクラスのインスタンスを3つ生成しています。
構文は、変数 = new クラス名です。
10~12行目は、インスタンスに値をセットしています。
ポイントは、インスタンスごとに保持するデータが異なる点です
14~16行目は、インスタンスから値を取得して表示しています。
構文は、変数 -> メソッド名です。
クラスからオブジェクト(インスタンス)を生成しない
クラスからオブジェクトを生成しないサンプルです。
static修飾子を追加します。new演算子がありませんが使用できます。
<?php
class Color
{
public static $name = "123"; //変数
public static function getName(){ //メソッド
return "赤";
}
}
print Color::$name; // 123
print Color::getName(); // 赤
?>
2~9行目は、Colorというクラスです。
4行目は、変数の前にstaticがついています。
static変数やクラスフィールドや静的フィールドとも呼ばれます。
6行目は、メソッドの前にstaticがついています。
staticメソッドやクラスメソッドや静的メソッドとも呼ばれます。
11行目は、newでオブジェクトを生成していませんがColorクラスの変数を参照できます。
構文はクラス名::変数名です。コロンが2つです。
13行目もnewでオブジェクトを生成していませんがColorクラスのメソッドを実行できます。
構文はクラス名.メソッド名です。こちらもコロンが2つです。
11,13行目とも参照先にstaticが付いていない場合は、エラーになります。
以下は、PHPマニュアルのクラスのリンクです。
https://www.php.net/manual/ja/language.oop5.basic.php
関連の記事
クラスはクラスを継承して使用できます。
→PHP クラスの継承の仕組みとサンプル
PHP コンストラクタのサンプル
PHP オーバーライドのサンプル
PHP 抽象クラスと抽象メソッドのサンプル(abstract)
PHP インターフェースのサンプル(interface)