PHP でクラス名を取得する

Habdul Hazeez 2023年1月30日
  1. PHP でクラス名を取得するには、クラス名解決を使用する
  2. PHP でクラス名を取得するには、__CLASS__ 定数を使用する
  3. PHP で get_class() 関数を使用してクラス名を取得する
  4. PHP でクラス名を取得するためにリフレクションクラスを使用する
  5. PHP でクラス名を取得するには、オブジェクトで::class を使用する
PHP でクラス名を取得する

このチュートリアルでは、クラス名解決、PHP __CLASS__ 定数、および get_class() メソッドを使用して PHP クラス名を取得する方法について説明します。クラス内外でのクラス名解決の使用法を学習します。

PHP でクラス名を取得するには、クラス名解決を使用する

コードに名前空間がある場合は、クラス名解決を介してクラス名を取得できます。結果は、完全修飾クラス名(FQCN)です。

この機能は、PHP では ClassName::class として利用できます。PHP に名前空間がある場合に便利です。

次のコード例では、ClassName::class を介したクラス名解決により、関連付けられたクラスのクラス名が返されます。

<?php
    namespace YourNameSpace;

    // Define a class
    class HelloClassName {}

    // Get the class name from ::class
    echo HelloClassName::class;
?>

出力:

YourNameSpace\HelloClassName

この機能をクラスメソッドで使用する場合は、静的メソッドを介してクラス名を取得できます。これを static::class と記述します。

次のコード例は、クラスメソッドでクラス名を取得する方法を示しています。

<?php
    namespace YourNameSpace;

    // Define the class name
    class HelloClassName {
        /**
         * Define a function that returns
         * the class name via static::class
         */
        public function getClassName() {
            return static::class;
        }
    }

    // Create a new object
    $hello_class_name = new HelloClassName();

    // Get the class name
    echo $hello_class_name->getClassName();
?>

出力:

YourNameSpace\HelloClassName

PHP でクラス名を取得するには、__CLASS__ 定数を使用する

__CLASS__ 定数は、PHP で事前定義された定数の一部です。クラス内で使用して、クラス名を取得できます。

次のコードは、__CLASS__ 定数を介してクラス名を取得します。

<?php
    // Define the class
    class Hello {
    	// This function will return the
    	// class name
        function HelloName (){
            return __CLASS__;
        }
    }

	// Create a new object
    $hello_object= new Hello();

	// Get the class name
    echo $hello_object->HelloName();
?>

出力:

Hello

PHP で get_class() 関数を使用してクラス名を取得する

PHP は get_class() 関数を提供します。この関数はクラス名を返します。手続き型およびオブジェクト指向プログラミングで使用できます。まず、手続き型について見ていきます。

次のコードブロックは、単一の関数を持つクラスを定義します。クラス内の関数は、引数が this キーワードの場合にクラス名を返します。

クラス名を取得するには、クラスからオブジェクトを作成します。次に、オブジェクトの名前を get_class() に渡します。

<?php
    // Define a class
    class Hello {
        function class_name() {
            echo "The class name is: ", get_class($this);
        }
    }

    // Create a new object
    $new_hello_object = new Hello();

    // Get the class name
    $new_hello_object->class_name();

    // Also, you can get the class name
    // via an external call
    // echo get_class($new_hello_object);
?>

出力:

The class name is: Hello

最初に、OOP スタイルの場合、静的クラスから get_class() 関数を返すことができます。

<?php
    // Define a class
    class Hello {
        public static function class_name() {
            return get_class();
        }
    }

    // Get the class name
    $class_name = Hello::class_name();

    echo $class_name;
?>	

出力:

Hello

クラスを拡張すると、拡張クラスは拡張クラスではなく親クラスの名前を返すため、このメソッドには制限があります。これを解決するには、get_called_class() を使用できます。

get_called class() 関数は Late StaticBindingに依存しています。この関数を使用すると、PHP は呼び出し元のクラスの名前を返します。これは、拡張クラスがそれ自体ではなく親クラスの名前を返す状況を解決します。

<?php

// Define a class
class Hello {

	// A static function that returns the
	// name of the class that calls it
	public static function called_class_name() {
		return get_called_class();
	}

	// This function will return the
	// defining class name
	public static function get_defining_class() {
		return get_class();
	}
}

class ExtendHello extends Hello {

}

$hello_class_name = Hello::called_class_name();
$extended_class_name = ExtendHello::called_class_name();
$extend_hello_parent_class = ExtendHello::get_defining_class();

echo "Hello class name: " . $hello_class_name . "\n";
echo "Extended Hello class name: " . $extended_class_name . "\n";
echo "Extended Hello parent class name: "  . $extend_hello_parent_class . "\n";
?>

出力:

Hello class name: Hello
Extended Hello class name: ExtendHello
Extended Hello parent class name: Hello

PHP でクラス名を取得するためにリフレクションクラスを使用する

リフレクションクラスは、PHP でクラス名を取得するための簡潔な方法です。クラスを作成します。このクラス内で、新しい Reflection クラスを返す関数を作成します。

Reflection クラスでは、引数を $this に設定する必要があります。その後、Reflection クラスで使用可能な getShortName() メソッドを介してクラス名を取得できます。

<?php
    // Define a class
    class Hello {
        // A function that returns the class
        // name via reflection
        public function HelloClassName() {
            return (new \ReflectionClass($this))->getShortName();
        }
    }

    // Create a new class name
    $hello_class_name = new Hello();

    // Get the class name
    echo $hello_class_name->HelloClassName();
?>

出力:

Hello

PHP でクラス名を取得するには、オブジェクトで::class を使用する

::class 機能は、PHP 8 より前のクラスで機能していました。PHP 以降、クラスからオブジェクトを作成する場合、::class を使用して作成したオブジェクトからクラス名を取得できます。

次のコードブロックに例があります。

<?php
    namespace YourNameSpace;

    // define the class
    class HelloClassName {

    }

    // Create a new object
    $hello_class_name = new HelloClassName();

    // Get the class name from the object
    // via ::class
    echo $hello_class_name::class;
?>

出力:

YourNameSpace\HelloClassName
著者: Habdul Hazeez
Habdul Hazeez avatar Habdul Hazeez avatar

Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.

LinkedIn

関連記事 - PHP Class