Laravel에서 PHP 클래스를 재정의하고 싶지만 귀찮게 하고 싶지 않은 여러 다른 클래스에 의해 확장되고 있습니다. 전체적인 구조는 다음과 같습니다
으아아아A/B/C/D/R은 모두 외부 패키지의 클래스입니다.
A/B/C/D를 P
而不更改任何这些文件(这将成为维护负担),这样 P 类扩展了 R
。因此,我可以对 P
클래스로 확장하여 추가하고 싶습니다.
나는 연구해 왔습니다class_alias()
,它允许我连接到自动加载器。这会正确加载类 P
.
내가 사용한 코드는 다음과 같습니다.
으아아아 으아아아하지만 오류가 발생했습니다:
클래스의 전체 파일 내용이 복사되는 것을 방지하면서 내부 PHP 클래스를 확장할 수 있는 솔루션을 찾고 있습니다. 그것이 가능한지조차 모르겠습니다. 확장하려는 클래스가 Laravel 서비스 컨테이너에 맞지 않으므로 기능을 추가할 수 있는 자사 방법이 없습니다.ErrorException: 이름이 이미 사용 중이므로 클래스
R
를 선언할 수 없습니다.
class_alias만으로는 충분하지 않습니다. P가 R을 확장하려면 두 클래스가 모두 존재해야 하기 때문입니다. 그리고 class_alias는 자동 로딩과 아무 관련이 없으며 단지 두 개의 이름을 가진 클래스를 선언할 뿐입니다.
실제로 필요한 것은 새 이름으로 실제 클래스 R을 정의한 다음 R이라는 이름으로 자신만의 클래스를 정의하는 것입니다(실제로 class_alias는 필요하지 않습니다).
한 가지 방법은 대상 클래스의 소스 코드를 동적으로 다시 작성한 다음 다음과 같이 수정된 복사본을 로드하는 것입니다(테스트되지 않음).
으아악중요하게, 이는 일반 자동 로더가 클래스 정의를 시도하기 전에 실행되어야 합니다. 예를 들어
spl_autoload_register
,其中$prepend
옵션을 true로 설정하여 사용할 수 있습니다.