LaravelやZendPHPといったフレームワークはオブジェクト指向で作成されています。
Laravelを理解したいのなら、まずオブジェクト指向を理解しなければなりません。
今回はオブジェクト指向について解説していきます。
クラスと関数/変数
「クラスは関数の集合体」と言ってしまうと単純化しすぎているかもしれません。
クラスと関数の違いはデータの持ち方という観点から眺めてみるとわかりやすいです。
関数とは与えられた入力(引数)に対して、処理結果を戻り値として出力するだけの仕組みでした。データは関数を通過するだけでその中に留まりません。これに対して、クラス(オブジェクト)は自分自身でデータを持つことができます。
下記の表にてクラス(オブジェクト)と関数、そして変数を比較してみました。
データを保持できる | データを処理できる | |
変数 | 〇 | ☓ |
関数 | ☓ | 〇 |
クラス/オブジェクト | 〇 | 〇 |
クラスとオブジェクトの関係
ここまではクラス(オブジェクト)といったように、クラスとオブジェクトが同じようなモノといった説明をしてきましたが、本質的には異なります。
クラスをモノの作りを表す「設計図」や「金型」であるとするなら、オブジェクトは「設計図」や「金型」をもとに作られた実際のモノです。
同一のクラスは一つしか存在しませんが、そのクラスをもとに作成されたオブジェクトは複数存在する可能性があります。
インスタンス化とメンバの呼び出し
クラスをもとにコピーを作る作業のことをインスタンス化、インスタンス化によってできる複製のことをインスタンス(オブジェクト)と呼びます。
インスタンス化とは、クラスを扱うために「自分専用のスペース」を取得するための行為といってよいでしょう。
クラスをインスタンス化するには、new演算子を使用します。
1 |
$変数名 = newクラス名([引数,…]) |
引数はオブジェクトを初期化するための情報です。引数が必要ない場合も、カッコは省略できない点に注意が必要です。
インスタンス化によってできたオブジェクトは「$変数名」に格納されます。オブジェクトが格納された変数のことをオブジェクト変数と呼びます。
クラス(オブジェクト)に属する関数と変数のことをメンバ関数、メンバ変数またはメソッド、プロパティと呼びます。
オブジェクトのプロパティ/メソッドはそれぞれアロー演算子(->)で呼び出すことができます。
静的プロパティ/静的メソッド
プロパティやメソッドの種類によっては、例外的にオブジェクトを生成せずに呼び出せるものがあります。このようなプロパティ/メソッドのことをクラスプロパティ/クラスメソッド、または静的プロパティ/静的メソッドと呼びます。
静的プロパティ/静的メソッドは「::」で呼び出すことができます。
1 2 |
[戻り値 = ]クラス名::メソッド名({引数,…}) クラス名::プロパティ名[=値] |
呼び出しもとがオブジェクト変数ではなく、クラスなのに注意が必要です。
詳しくは下記の表を参考にしてください。
種類 | アクセス方法 |
インスタンスメソッド/インスタンスプロパティ | ->(アロー演算子) |
静的メソッド/静的プロパティ | :: |
クラス内定数 | :: |