확장 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!