|
プロパティ
クラスのメンバ変数のことを プロパティ といいます。
それ以外に フィールド
などという呼びかたを見たことがあるかもしれません。
しかし、このマニュアルでは プロパティ
と呼ぶことにします。
プロパティは、少なくともひとつのキーワード
(たとえば アクセス権
のキーワード、
static キーワード、
PHP 8.1.0 以降のみ readonly) のあとに、
オプションの型宣言
(PHP 7.4 以降、但し
クラスのメソッドからstatic でないプロパティにアクセスするには
クラスのメソッドがオブジェクトのコンテキストからコールされたときには、 擬似変数 $this が使えます。 $this は、呼び出し元のオブジェクトの値です。
例1 プロパティの宣言
型宣言
PHP 7.4.0 以降は、プロパティの定義に 型宣言 を含めることができます。
但し、 例2 型付きプロパティの例
上の例の出力は以下となります。 int(1234) NULL 型付きプロパティは、アクセスする前に初期化しなければいけません。 初期化しないと、Error がスローされます。 例3 プロパティにアクセスする
上の例の出力は以下となります。 string(8) "triangle" int(3) string(6) "circle" Fatal error: Uncaught Error: Typed property Shape::$numberOfSides must not be accessed before initialization 読み取り専用プロパティ
PHP 8.1.0 以降では、 例4 読み取り専用プロパティの例
読み取り専用プロパティは、一度しか初期化できません。 初期化できるのは、 そのプロパティが宣言された場所と同じスコープに限られます。 これらのルールから外れたプロパティへの代入や変更を行った場合、 Error 例外が発生します。 例5 読み取り専用プロパティの不正な初期化
プロパティの変更は、単純な代入にとどまりません。 次に示すプロパティへの変更例は、 すべて Error 例外が発生します:
但し、プロパティが読み取り専用であっても、 そのプロパティの内部まで変更できなくなるわけではありません。 読み取り専用プロパティ内部のオブジェクト(またはリソース) は、 内部的に変更しても構いません:
動的なプロパティオブジェクトに対して、存在しないプロパティを代入しようとした場合、 PHP は自動的に対応するプロパティを作成します。 こうして作成された動的なプロパティは、 そのインスタンスで のみ 使えます。 |