ホームページ >バックエンド開発 >PHPの問題 >phpは現在のメソッドを呼び出します

phpは現在のメソッドを呼び出します

王林
王林オリジナル
2023-05-06 12:02:07732ブラウズ

PHP 開発では、現在のメソッドの名前、パラメーター リスト、戻り値などの取得など、現在のメソッドに関する情報を取得する必要がある場合があります。この記事では、現在の情報を入手する方法をいくつか紹介します。

  1. 組み込み変数を使用する

PHP には、__FUNCTION__ など、現在のメソッドに関する情報を取得するための組み込み変数がいくつかあります。 __メソッド____クラス____TRAIT__など。このうち、 __FUNCTION__ は現在の関数の名前を取得でき、 __METHOD__ は現在のメソッド(クラス内の関数)の名前を取得でき、 __CLASS__ は現在の関数の名前を取得できます。現在のクラスの名前、__TRAIT__ 現在のトレイトの名前を取得できます。

例:

class MyClass {
    public function myMethod() {
        echo __FUNCTION__ . "\n";
        echo __METHOD__ . "\n";
        echo __CLASS__ . "\n";
        echo __TRAIT__ . "\n";
    }
}

$myInstance = new MyClass();
$myInstance->myMethod();

出力結果:

myMethod
MyClass::myMethod
MyClass

上記のコードでは、__FUNCTION__ は現在の関数の名前を出力します myMethod, __METHOD__ は現在のメソッドの名前を出力します MyClass::myMethod, __CLASS__ は現在のクラスの名前 MyClass を出力します, __TRAIT__ は、現在の特性の名前を出力します。 __METHOD__ は、クラス名とメソッド名を含む完全なメソッド名を出力することに注意してください。

  1. ReflectionClass と ReflectionMethod の使用

ReflectionClass と ReflectionMethod は、クラスとメソッドの情報を取得するために使用できる PHP の組み込みリフレクション クラスです。 ReflectionMethod の getClassName() メソッドを使用して、現在のメソッドが存在するクラスの名前を取得します。getName() メソッドは、現在のメソッドの名前を取得できます。getParameters() メソッドは、現在のメソッドのパラメータ リストを取得できますgetReturnType() メソッドは、現在のメソッドの戻り値を取得できます。

例:

class MyClass {
    public function myMethod($param1, $param2) {
        // do something
    }
}

$myInstance = new MyClass();
$reflectMethod = new ReflectionMethod($myInstance, 'myMethod');
echo $reflectMethod->getClassName() . "\n"; // 输出 MyClass
echo $reflectMethod->getName() . "\n"; // 输出 myMethod
$params = $reflectMethod->getParameters();
foreach ($params as $param) {
    echo $param->getName() . "\n"; // 输出 param1 和 param2
}

上記のコードでは、ReflectionMethodクラスを通じてMyClassクラスのmyMethodメソッドを取得し、それぞれクラス名、メソッド名、パラメータ名を出力しています。

  1. debug_backtrace 関数を使用する

debug_backtrace 関数は、現在の呼び出しスタックの情報を取得し、現在のメソッドの情報を取得するために使用できます。 debug_backtrace 関数によって取得される情報は配列であり、この配列にはコール スタック内のすべての関数とメソッドに関する情報が含まれるため、現在のメソッドに関する情報を見つけるには配列を走査する必要があります。

例:

class MyClass {
    public function myMethod() {
        $trace = debug_backtrace();
        foreach ($trace as $traceItem) {
            if ($traceItem['function'] == 'myMethod') {
                echo $traceItem['class'] . "\n"; // 输出 MyClass
                echo $traceItem['function'] . "\n"; // 输出 myMethod
                break;
            }
        }
    }
}

$myInstance = new MyClass();
$myInstance->myMethod();

上記のコードでは、debug_backtrace 関数を通じてコール スタック情報が取得され、配列が走査されて myMethod メソッド情報とクラス名が検索されます。メソッド名がそれぞれ出力されます。

概要

この記事では、現在のメソッド情報を取得する 3 つの方法、つまり、組み込み変数の使用、ReflectionClass と ReflectionMethod の使用、および debug_backtrace 関数の使用を紹介します。このうち、組み込み変数を使用するのが最も簡単ですが、特定のパラメータ リストと戻り値を取得できません。ReflectionClass および ReflectionMethod を使用すると、ReflectionClass または ReflectionMethod オブジェクトをインスタンス化する必要があり、より面倒です。ただし、debug_backtrace 関数を使用すると、すべての呼び出しを取得できます。スタック情報を取得するには、配列を走査する必要があります。 現在のメソッドに関する情報を見つけるには時間がかかります。実際の開発では、現在のメソッド情報を取得するために、ニーズに応じて適切なメソッドを選択できます。

以上がphpは現在のメソッドを呼び出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。