【PHP8.x】class_parents関数の使い方

作成日: 更新日:

class_parents関数は、指定されたクラスが継承しているすべての親クラスの名前を取得する関数です。PHPのオブジェクト指向プログラミングにおいて、クラスは他のクラスの機能や特性を受け継ぐ「継承」という仕組みを利用します。この関数は、あるクラスがどのような親クラスから機能を受け継いでいるのか、その継承の経路をプログラムで確認したい場合に非常に有効です。

この関数にクラスの名前(文字列)またはそのクラスのオブジェクトを渡すと、親クラスの名前を文字列として格納した配列を返します。返される配列の順序は、指定されたクラスに最も近い親クラスから始まり、さらにその親クラスへと、継承の階層を遡る形で並べられます。例えば、CクラスがBクラスを継承し、BクラスがAクラスを継承している場合、Cクラスに対してこの関数を適用すると、['B', 'A']のような配列が返されます。

もし、指定されたクラスがどのクラスも継承していない(つまり、親クラスを持たない)場合は、空の配列を返します。また、存在しないクラス名を指定した場合には、falseを返して、クラスが見つからなかったことを通知します。クラスの継承関係を動的に分析したり、特定のクラスが特定の親クラスを持っているかを確認したりする際に役立つでしょう。

基本的な使い方

構文(syntax)

<?php

class GrandparentClass {}
class ParentClass extends GrandparentClass {}
class ChildClass extends ParentClass {}

// クラス名を文字列で指定して、その親クラスをすべて取得
$parents = class_parents('ChildClass');

// 結果は親クラスの名前を要素とする配列
print_r($parents);

// オブジェクトのインスタンスを指定して、その親クラスをすべて取得
$childObject = new ChildClass();
$objectParents = class_parents($childObject);

print_r($objectParents);

?>

引数(parameters)

object|string $object_or_class, bool $autoload = true

  • object|string $object_or_class: 親クラスの情報を取得したいオブジェクト、またはクラス名を表す文字列
  • bool $autoload = true: オートロードを有効にするかどうかを指定する真偽値(デフォルトは true)

戻り値(return)

array|false

指定されたクラスの親クラスの名前を配列で返します。クラスが存在しない場合は false を返します。

サンプルコード

PHP class_parents で親クラスを取得する

<?php

/**
 * 基本的な乗り物を表すクラス。
 */
class Vehicle
{
    // このクラスは継承の例のために定義されています。
    // 特に追加するプロパティやメソッドはありません。
}

/**
 * 車を表すクラス。Vehicleを継承します。
 */
class Car extends Vehicle
{
    // Carクラス独自のプロパティやメソッドをここに追加できます。
}

/**
 * スポーツカーを表すクラス。Carを継承します。
 */
class SportsCar extends Car
{
    // SportsCarクラス独自のプロパティやメソッドをここに追加できます。
}

echo "--- class_parents() の使用例 ---\n\n";

// 1. クラス名(文字列)を引数として渡す例
// 'SportsCar' クラスが直接または間接的に継承している全ての親クラスを取得します。
echo "1. 'SportsCar' クラスの親クラス:\n";
$parentsOfSportsCar = class_parents('SportsCar');

if ($parentsOfSportsCar !== false) {
    print_r($parentsOfSportsCar);
} else {
    echo "親クラスが見つかりませんでした。\n";
}
echo "\n";

// 2. オブジェクトを引数として渡す例
// 'SportsCar' クラスのインスタンスを作成し、そのオブジェクトの親クラスを取得します。
echo "2. 'SportsCar' オブジェクトの親クラス:\n";
$mySportsCar = new SportsCar();
$parentsOfObject = class_parents($mySportsCar);

if ($parentsOfObject !== false) {
    print_r($parentsOfObject);
} else {
    echo "親クラスが見つかりませんでした。\n";
}
echo "\n";

// 3. 別のクラスの例
// 'Car' クラスの親クラスを取得します。
echo "3. 'Car' クラスの親クラス:\n";
$parentsOfCar = class_parents('Car');

if ($parentsOfCar !== false) {
    print_r($parentsOfCar);
} else {
    echo "親クラスが見つかりませんでした。\n";
}
echo "\n";

// 結果の配列は、継承の深さに応じて上位のクラスから順に並びます。
// 例えば SportsCar の場合、Car (直接の親) -> Vehicle (Carの親) の順になります。

?>

PHPのclass_parents関数は、指定されたクラスやオブジェクトが直接的または間接的に継承している全ての親クラスのリストを取得するために使用します。この関数は、オブジェクト指向プログラミングにおけるクラスの継承関係を動的に調査する際に役立ちます。

引数には、親クラスを知りたいクラスの名前を文字列で渡すか、そのクラスのインスタンス(オブジェクト)を渡すことができます。オプションの第二引数$autoloadは、指定されたクラスが見つからない場合にPHPのオートロード機能を呼び出すかどうかを制御します。通常はtrueのままで問題ありません。 戻り値としては、継承の深さに応じて最も近い親クラスから順に、親クラスの名前が格納された配列が返されます。もし指定されたクラスに親クラスが存在しない場合や、クラスが見つからない場合はfalseが返されます。

サンプルコードでは、VehicleCarSportsCarという継承関係を持つクラスを定義しています。class_parents関数を使い、'SportsCar'というクラス名を文字列として指定した場合と、new SportsCar()で作成したオブジェクトを指定した場合の両方で親クラスのリストを取得しています。これにより、SportsCarの親であるCarと、さらにその親であるVehicleが配列として取得される様子を確認できます。また、'Car'クラスの親クラスを取得する例も示されており、Carの親であるVehicleのみが返されることがわかります。このように、class_parents関数はクラスの継承チェーンを簡単にたどるための便利な機能です。

class_parents関数は、指定されたクラスやオブジェクトが直接的または間接的に継承している全ての親クラス名を配列で取得します。引数には、クラスのインスタンス(オブジェクト)またはクラス名(文字列)のどちらかを渡すことができます。親クラスが存在しない場合や、指定したクラスが見つからない場合はfalseを返しますので、必ず戻り値がfalseでないか確認してください。戻り値の配列は、最も直接的な親クラスから順に、上位の親クラスへと並びます。これにより、継承の階層を把握することができます。この関数は、クラスの継承関係を動的に調べたい場合に役立ちます。

【PHP8.x】class_parents関数の使い方 | いっしー@Webエンジニア