>  기사  >  백엔드 개발  >  PHP는 현재 메소드를 호출합니다

PHP는 현재 메소드를 호출합니다

王林
王林원래의
2023-05-06 12:02:07709검색

PHP 개발에서는 때때로 현재 메서드의 이름, 매개변수 목록, 반환 값 등을 가져오는 등 현재 메서드에 대한 정보를 가져와야 할 때가 있습니다. 이 기사에서는 현재 방법에 대한 정보를 얻는 몇 가지 방법을 소개합니다.

  1. 내장 변수 사용

PHP에는 __FUNCTION__, __METHOD__, __CLASS__, __TRAIT__ 등 그 중 __FUNCTION__은 현재 함수의 이름을 얻을 수 있고, __METHOD__는 현재 메소드(클래스 내의 함수)의 이름을 얻을 수 있으며, __CLASS__ code>는 현재 클래스를 가져올 수 있습니다. <code>__TRAIT__는 현재 특성의 이름을 가져올 수 있습니다. __FUNCTION____METHOD____CLASS____TRAIT__ 等。其中,__FUNCTION__ 可以获取当前函数的名称,__METHOD__ 可以获取当前方法(类中的函数)的名称,__CLASS__ 可以获取当前类的名称,__TRAIT__ 可以获取当前 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__ 输出了当前 trait 的名称。需要注意的是,__METHOD__

예:
    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
    }
  1. 출력 결과:
  2. 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();
위 코드에서 __FUNCTION__는 현재 함수의 이름인 myMethod, __METHOD__를 출력합니다. > 현재 메소드의 이름을 출력합니다. MyClass::myMethod, __CLASS__는 현재 클래스의 이름을 출력합니다. MyClass, __TRAIT__ code>는 현재 특성의 이름을 출력합니다. <code>__METHOD__는 클래스 이름과 메서드 이름을 포함하여 전체 메서드 이름을 출력한다는 점에 유의하세요.

ReflectionClass 및 ReflectionMethod 사용

ReflectionClass 및 ReflectionMethod는 클래스 및 메서드 정보를 얻는 데 사용할 수 있는 PHP의 내장 리플렉션 클래스입니다. ReflectionMethod의 getClassName() 메소드를 사용하면 현재 메소드가 위치한 클래스의 이름을 얻을 수 있습니다. getName() 메소드는 현재 메소드의 매개변수 목록을 가져올 수 있습니다. . getReturnType() 메서드는 현재 메서드 유형의 반환 값을 가져올 수 있습니다.
  1. 예:
  2. rrreee
위 코드에서 MyClass 클래스의 myMethod 메서드는 ReflectionMethod 클래스를 통해 얻어지며, 클래스 이름, 메서드 이름, 매개 변수 이름이 각각 출력됩니다.

debug_backtrace 함수 사용

debug_backtrace 함수는 현재 호출 스택의 정보를 얻을 수 있으며 현재 메서드의 정보를 얻는 데 사용할 수 있습니다. debug_backtrace 함수를 통해 얻은 정보는 배열이며, 배열에는 호출 스택의 모든 함수와 메서드에 대한 정보가 포함되어 있으므로 현재 메서드에 대한 정보를 찾으려면 배열을 순회해야 합니다.

예:

rrreee

위 코드에서는 debug_backtrace 함수를 통해 콜 스택 정보를 얻은 후 배열을 순회하여 myMethod 메서드 정보를 찾아 클래스 이름과 메서드 이름이 각각 출력됩니다. 🎜🎜요약🎜🎜이 글에서는 현재 메서드 정보를 얻는 세 가지 방법, 즉 내장 변수 사용, ReflectionClass 및 ReflectionMethod 사용, debug_backtrace 함수 사용을 소개합니다. 그중 내장 변수를 사용하는 것이 가장 간단하지만 특정 매개변수 목록과 반환 값을 가져올 수 없습니다. ReflectionClass 및 ReflectionMethod를 사용하려면 ReflectionClass 또는 ReflectionMethod 개체를 인스턴스화해야 하며, 이는 debug_backtrace 함수를 사용하여 모든 호출을 얻을 수 있지만 더 번거롭습니다. 스택 정보를 얻으려면 배열을 순회해야 합니다. 현재 메서드에 대한 정보를 찾는 데는 시간이 많이 걸립니다. 실제 개발에서는 현재 방법 정보를 얻기 위해 필요에 따라 적절한 방법을 선택할 수 있습니다. 🎜

위 내용은 PHP는 현재 메소드를 호출합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.