【PHP8.x】get_class_vars関数の使い方
get_class_vars関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
get_class_vars関数は、指定されたクラスに定義されているインスタンスプロパティのデフォルト値を取得する関数です。この関数を使用すると、クラスがインスタンス化される際に初期値として設定される、定義済みのプロパティとその初期値をプログラムから動的に確認することができます。
引数には、プロパティのデフォルト値を知りたいクラスの名前(文字列)か、そのクラスのオブジェクトを渡します。関数は、指定されたクラスに属するpublic、protected、privateのすべてのインスタンスプロパティを、プロパティ名をキー、デフォルト値を値とする連想配列として返します。なお、静的(static)プロパティは、この関数では取得されません。静的プロパティはクラス自体に属し、インスタンスプロパティはオブジェクトに属するためです。クラスが他のクラスを継承している場合、親クラスから継承されたインスタンスプロパティも結果に含まれます。
指定されたクラスが存在しない場合は、警告(warning)が発生し、falseが返されます。この関数は、クラスの構造を動的に調べたり、オブジェクトの初期設定値に基づいて処理を行ったりする場面で非常に有用です。例えば、設定ファイルやデータベーススキーマを動的に生成する際などに、クラスの持つプロパティ情報を活用できます。
構文(syntax)
1<?php 2class ExampleClass { 3 public $publicProperty = 'default public'; 4 protected $protectedProperty = 'default protected'; 5 private $privateProperty = 'default private'; 6 public static $staticProperty = 'default static'; 7} 8 9$classProperties = get_class_vars('ExampleClass'); 10print_r($classProperties);
引数(parameters)
string $class
- string $class: クラス名を表す文字列。このクラスに定義されているプロパティの連想配列を取得します。
戻り値(return)
array
指定されたクラスの公開(public)、保護(protected)、プライベート(private)な全プロパティの名前をキー、その初期値を値とする連想配列を返します。
サンプルコード
PHP get_class_varsでクラスの静的プロパティを取得する
1<?php 2 3/** 4 * このファイルは、get_class_vars() 関数の使用方法を示すサンプルコードです。 5 * get_class_vars() は、クラスの定義されているプロパティを返します。 6 * (ただし、オブジェクトが所有する静的ではないプロパティのみ) 7 */ 8 9class MyClass 10{ 11 // 公開プロパティ 12 public $publicVar = 'これは公開プロパティです'; 13 14 // 保護されたプロパティ 15 protected $protectedVar = 'これは保護されたプロパティです'; 16 17 // プライベートプロパティ 18 private $privateVar = 'これはプライベートプロパティです'; 19 20 // 静的プロパティ 21 public static $staticVar = 'これは静的プロパティです'; 22 23 // デフォルト値のない公開プロパティ 24 public $noDefaultVar; 25} 26 27// MyClass の定義されているプロパティを取得します。 28// get_class_vars() は、クラス名 (文字列) を引数として受け取ります。 29// 戻り値は、プロパティ名をキー、デフォルト値を値とする連想配列です。 30// 静的プロパティのみが対象となり、非静的プロパティは含まれません。 31$classVars = get_class_vars('MyClass'); 32 33echo "クラス 'MyClass' の定義されている静的プロパティ:\n"; 34 35// 取得したプロパティの連想配列をループして出力します。 36foreach ($classVars as $varName => $varValue) { 37 echo " - プロパティ名: {$varName}, デフォルト値: "; 38 // デフォルト値が設定されていない場合はnull、設定されている場合はその値が表示されます。 39 echo (null === $varValue) ? "null\n" : "'{$varValue}'\n"; 40} 41 42// get_class_vars() は、非静的プロパティは返しません。 43// この出力には、$publicVar, $protectedVar, $privateVar は含まれません。 44// ただし、$staticVar は含まれます。 45 46?>
PHPのget_class_vars関数は、指定したクラスが持つ静的プロパティの情報を取得するために使用されます。この関数は、引数として対象となるクラス名を文字列で受け取ります。たとえば、MyClassというクラスの静的プロパティを知りたい場合は、get_class_vars('MyClass')と記述します。戻り値は連想配列となり、プロパティ名がキー、そのプロパティに設定されているデフォルト値が値として格納されます。
特に重要な点として、get_class_vars関数は、クラスの定義に直接記述された静的プロパティのみを対象とします。public static $staticVarのようなプロパティは取得できますが、public $publicVarやprivate $privateVarのような非静的プロパティ(インスタンスが持つプロパティ)は含まれません。もしプロパティにデフォルト値が設定されていない場合、その値はnullとして返されます。
サンプルコードでは、MyClassに様々な種類のプロパティを定義していますが、get_class_vars('MyClass')を実行すると、このクラスの静的プロパティである$staticVarの情報だけが連想配列として取得されます。これにより、クラスの定義から静的プロパティの構造を動的に確認することができます。
get_class_vars()は、指定したクラスに定義されている静的プロパティとそのデフォルト値を連想配列で返します。特に注意が必要なのは、この関数が非静的プロパティ(インスタンスプロパティ)は返さないという点です。リファレンス情報に「オブジェクトが所有する静的ではないプロパティのみ」と記載がありますが、これは誤解を招きやすい記述で、正しくは静的プロパティのみが対象です。public、protected、privateのいずれのアクセス修飾子を持つ静的プロパティも取得対象となります。プロパティにデフォルト値が設定されていない場合はnullが返されます。インスタンスが持つ非静的プロパティを取得したい場合は、get_object_vars()関数を利用してください。