PHP入門 オブジェクト指向の基本

インスタンス化とメンバーの呼び出し

クラスを元にコピーを作る作業をインスタンス化と言います。インスタンス化によってできる複製のことをインスタンス(オブジェクト)と呼びます。クラスをインスタンス化するには、new演算子を利用します。

構文:クラスのインスタンス化(new演算子)

$変数名 = new クラス名([引数, ・・・・])

引数は、オブジェクトを初期化するための情報(オブジェクトに最初に設定しておきたいデータ)です。引数が必要ない場合もカッコは必要です。

インスタンス化によってできたオブジェクトは「$変数名」に格納されます。オブジェクトが格納された変数のことをオブジェクト変数と呼ぶ場合もあります。クラス(オブジェクト)に属する関数と変数のことを、それぞれメンバー関数/メンバー変数、またはメソッド/プロパティと呼びます。オブジェクトのメソッド/プロパティは、それぞれアロー演算子(->)で呼び出せます。

構文:メソッド/プロパティの呼び出し(アロー演算子)

[戻り値 = ]オブジェクト変数 -> メソッド名([引数, ・・・])
オブジェクト変数 -> プロパティ名[= 値]

null安全演算子(?->)

PHP8以降では、「?->」(null安全演算子)が追加され、「オブジェクトが非nullのときだけ、そのメンバーにアクセスしたい」(=nullの場合はそのままnullを返したい)という状況にも対応できるようになりました

<?php
$dt = null;
print $dt? -> format('Y年m月d日 g:i:s');
//結果:なにも表示されない($dtがnullでもエラーにはならない)

また、複数階層にわたって「?->」を利用することもできます。

$obj?->hoge()?->foo()?->bar()

ちなみに、null安全演算子は、その性質上、以下のような文脈では利用できません。

$obj?->hoge = '…';        //➊
$result = &$obj?->hoge;   //➋

➊➋ともに対象の式がnullになる可能性があるからです。nullへの代入は当然できませんし、nullの参照を得ることもできません。

静的メソッド/静的プロパティ

メソッドやプロパティの種類には、例外的にオブジェクトを生成せずに呼び出せるものがあります。このようなメソッド/プロパティのことをクラスメソッド/クラスプロパティ、静的メソッド/静的プロパティと呼びます。静的メソッド/静的プロパティは、それぞれ「::」演算子で呼び出すことができます。

構文:静的メソッド/静的プロパティの呼び出し(::演算子)

[戻り値 = ]クラス名::メソッド名([引数,・・・・])
クラス名::プロパティ名[= 値]

静的メソッド/静的プロパティに対して、オブジェクト経由で呼び出すメソッド/プロパティのことをインスタスメソッド/インスタンスプロパティと呼びます。なお、クラスの中で定義された定数(クラス定数)にアクセスする場合にも、同じく「::」演算子を利用できます。クラス定数には「クラス名::定数名」の形式でアクセスします。

メンバーの種類とアクセス方法

種類アクセス方法
インスタンスメソッド/インスタンスプロパティ->(アロー演算子)
静的メソッド/静的プロパティ::
クラス定数::