>  Q&A  >  본문

종속성을 변경하지 않고 내부적으로 사용되는 PHP 클래스 확장

Laravel에서 PHP 클래스를 재정의하고 싶지만 귀찮게 하고 싶지 않은 여러 다른 클래스에 의해 확장되고 있습니다. 전체적인 구조는 다음과 같습니다

으아아아

A/B/C/D/R은 모두 외부 패키지의 클래스입니다.

A/B/C/D를 P 而不更改任何这些文件(这将成为维护负担),这样 P 类扩展了 R。因此,我可以对 P클래스로 확장하여 추가하고 싶습니다.

나는 연구해 왔습니다class_alias(),它允许我连接到自动加载器。这会正确加载类 P.

내가 사용한 코드는 다음과 같습니다.

으아아아 으아아아

하지만 오류가 발생했습니다:

ErrorException: 이름이 이미 사용 중이므로 클래스 R를 선언할 수 없습니다.

클래스의 전체 파일 내용이 복사되는 것을 방지하면서 내부 PHP 클래스를 확장할 수 있는 솔루션을 찾고 있습니다. 그것이 가능한지조차 모르겠습니다. 확장하려는 클래스가 Laravel 서비스 컨테이너에 맞지 않으므로 기능을 추가할 수 있는 자사 방법이 없습니다.

P粉278379495P粉278379495306일 전340

모든 응답(1)나는 대답할 것이다

  • P粉189606269

    P粉1896062692024-01-11 00:08:07

    class_alias만으로는 충분하지 않습니다. P가 R을 확장하려면 두 클래스가 모두 존재해야 하기 때문입니다. 그리고 class_alias는 자동 로딩과 아무 관련이 없으며 단지 두 개의 이름을 가진 클래스를 선언할 뿐입니다.

    실제로 필요한 것은 새 이름으로 실제 클래스 R을 정의한 다음 R이라는 이름으로 자신만의 클래스를 정의하는 것입니다(실제로 class_alias는 필요하지 않습니다).

    한 가지 방법은 대상 클래스의 소스 코드를 동적으로 다시 작성한 다음 다음과 같이 수정된 복사본을 로드하는 것입니다(테스트되지 않음).

    으아악

    중요하게, 이는 일반 자동 로더가 클래스 정의를 시도하기 전에 실행되어야 합니다. 예를 들어 spl_autoload_register,其中 $prepend 옵션을 true로 설정하여 사용할 수 있습니다.

    회신하다
    0
  • 취소회신하다