PHP クラスとオブジェクトの概要
クラス と オブジェクト
クラスの宣言
- class クラス名 { }
では簡単な クラス を宣言してみましょう。クラス の作成は、キーワード class を使用し、続いてクラス名を記述します。その後に「{ }(波括弧)」のペアが続き内容を記述します。内容は クラス の プロパティ と メソッド の定義です。クラス名は大文字小文字が区別されません。詳細は「PHP の クラス名」をご覧ください。
1 2 3 4 | <?php //クラスの宣言 class optical_drive{};//光学ドライブ ?> |
内容は空ですが、クラスを定義できました。実行しても何も出力されませんが、問題なくクラスを定義出来ています。
基本的な「クラス」の定義
簡略化した クラス の定義は以下のような形になります。
1 2 3 4 | class クラス名{ $変数名; //プロパティ function 関数名(){処理;} //メソッド } |
クラスの中でクラス内変数の プロパティ と クラス内関数の メソッド を記述します。クラス は、[データ自身(プロパティ)]とデータを取り扱う[処理コード(メソッド)]が一つに合わさったものです。データベースなどを利用したデータ管理とそれを扱う関数群による手続き型プログラムでもデータと処理コードがあることには変わりませんが、オブジェクトはそれらを一つの塊として扱います。
厳密には以下の形で 継承 インターフェース トレイト アクセス権 などが設定できます。
1 2 3 4 5 6 7 | class クラス名 [extends 基底クラス名] [ implements インターフェース名, [ インターフェース名,, ] ] { [ use トレイト名, [ トレイト名,, ]; ] [ アクセス権 $プロパティ名 [ = 値 ]; ,, ] [ アクセス権 function 関数名 (引数) { 処理; } } ※[ ] は省略可能 |
こちらに関しては順次説明します。まずは インタスタンス化、プロパティ、メソッド について話を進めましょう。
インスタンス化 オブジェクトの作成とアクセス
- $インスタンス new クラス名;
では次にこの クラス の オブジェクト を作成して インスタンス化(=オブジェクトが実体化したモノ) してみます。クラス から インスタンス化 して生成したものを インスタンス と呼びます。オブジェクト と呼称する場合も多いのですが、本ページでは インスタンス とします。インスタンス を通してクラス内の プロパティ や メソッド にアクセス出来ます。インスタンス の作成は キーワード new を使用します。作成した インスタンス の型も確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 | <?php //クラスの宣言 class optical_drive{};//光学ドライブ //インスタンス化(オブジェクトを操作するためのインスタンスの生成) $objA = new optical_drive; $objB = new optical_drive; //型の確認 echo gettype($objA)."<br>\n"; echo gettype($objB)."<br>\n"; ?> |
object
文字列型 string などと同じように インスタンス にも型があり、gettype() で確認すると object となります。例では、$objA $objB と2つ インスタンス を生成していますが、それぞれ独立しています。このように幾つでも インスタンス を生成することが可能です。これを マルチプルインスタンス と言います。それぞれの インスタンス は完全に独立しており、お互いに影響を受けません。
マルチプルインスタンス
クラス squaring の インスタンス を別名で $obj1 $obj2 と2つを生成してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php //クラス class squaring{ //プロパティ private $value; //メソッド public function set_value($i){ $this->value = $i*$i; } } //インスタンス作成 $obj1 = new squaring(); //値のセット $obj1->set_value(10); var_dump($obj1); echo "<hr/>\n"; //別名インスタンス作成 $obj2 = new squaring(); //値のセット $obj2->set_value(30); var_dump($obj2); echo "<hr/>\n"; ?> |
1 2 | object(squaring)#1 (1) { ["value":"squaring":private]=> int(100) } object(squaring)#2 (1) { ["value":"squaring":private]=> int(900) } |
各 インスタンス に対して set_value() メソッド を呼び出して プロパティ value に操作を行います。プロパティ の値は各 インスタンス がそれぞれの値を保持しています。このように インスタンス は独立しているのです。プロパティ や メソッド に関しては以降で詳しく説明します。インスタンス は独立しているということを覚えておきましょう!
タグ(=記事関連ワード)
日付
最終更新日: