확장 PHP 클래스의 정적 메서드 호출에서 하위 클래스 이름을 검색하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-10-30 05:58:02
원래의
188명이 탐색했습니다.

How Can I Retrieve the Subclass Name from a Static Method Call in Extended PHP Classes?

확장 PHP 클래스의 정적 호출에서 클래스 이름을 검색하는 방법

소프트웨어 엔지니어링에서 상속을 사용하면 클래스가 자신의 속성과 기능을 상속받을 수 있습니다. 학부모 수업. PHP에서는 하위 클래스로 클래스를 확장하면 상위 클래스에 정의된 속성과 메서드에 액세스할 수 있습니다. 그러나 상위 클래스의 정적 메소드 내에서 하위 클래스의 이름에 액세스하는 것은 어려울 수 있습니다.

문제:

상위 클래스 Action과 Action에서 상속되는 하위 클래스 MyAction입니다. 하위 클래스 내에서 정적으로 호출될 때 하위 클래스의 이름을 반환하는 Action 클래스의 메서드를 개발하려고 합니다. 그러나 상위 클래스에서 __CLASS__ 변수를 사용하면 항상 상위 클래스의 이름이 반환되며 이는 원하는 결과가 아닙니다.

해결책 1: 후기 정적 바인딩(PHP 5.3 ):

PHP 5.3에는 정의 중이 아닌 런타임 시 정적 메서드 호출에 대한 대상 클래스를 확인하는 후기 정적 바인딩이 도입되었습니다. 이 기능을 사용하면 정적 메서드가 호출되는 클래스의 이름을 검색하는 get_called_class() 함수를 사용할 수 있습니다.

예:

<code class="php">class Action {
    public static function n() {
        return get_called_class();
    }
}

class MyAction extends Action {

}

echo MyAction::n(); //displays MyAction</code>
로그인 후 복사

이 예에서 get_called_class() 함수는 메서드가 상위 클래스 Action에 정의되어 있더라도 하위 클래스 MyAction의 이름을 반환합니다. 이 접근 방식은 문제에 대한 간단한 해결책을 제공합니다.

해결책 2: 동적 클래스 이름 검색(PHP 5.2 ):

PHP 버전에서는 후기 정적 바인딩을 사용할 수 없습니다. 5.3 이전에는 클래스 이름을 동적으로 검색하는 대체 방법이 있습니다.

<code class="php">class Action {
    public function n() {
        $object = new ReflectionObject($this);
        return $object->getName();
    }
}

class MyAction extends Action {

}

$myAction = new MyAction();
echo $myAction->n(); //displays MyAction</code>
로그인 후 복사

이 접근 방식에서는 현재 객체에 대한 ReflectionObject 인스턴스를 만들고 getName() 메서드를 사용하여 클래스 이름을 검색합니다. . 이 솔루션은 PHP 버전 5.2부터 작동하지만 반사 객체를 생성하는 추가 단계가 필요합니다.

위 내용은 확장 PHP 클래스의 정적 메서드 호출에서 하위 클래스 이름을 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!