일반적인 상속 옵션 없이 클래스나 해당 메서드를 수정해야 하는 상황이 발생할 수 있습니다. 예를 들어 다음 클래스를 살펴보겠습니다.
class third_party_library { function buggy_function() { return 'bad result'; } function other_functions(){ return 'blah'; } }
buggy_function() 메서드를 보다 바람직한 구현으로 바꾸고 싶을 수도 있지만 상속을 통해 그렇게 하는 것은 불가능합니다. PHP는 클래스가 정의된 후에 클래스를 수정할 수 있는 Monkey 패치를 기본적으로 지원하지 않습니다.
한 가지 가능한 해결책은 runkit_method_redefine() 함수를 제공하는 PECL runkit 라이브러리를 사용하는 것입니다. 이를 통해 코드 문자열을 평가하여 메서드를 수정할 수 있습니다:
runkit_method_redefine('third_party_library', 'buggy_function', '', 'return \'good result\'' );
그러나 이 접근 방식에는 단점이 있습니다. 문자열 평가를 통해 코드를 수정하는 것은 위험할 수 있으며 디버깅이 어려울 수 있습니다.
또 다른 대안은 기존 클래스를 수정하는 대신 클래스에 함수를 추가하는 것을 고려하는 것입니다. C#과 같은 일부 언어에서는 "부분 클래스"를 사용하여 이것이 가능합니다. 그러나 특정 사례의 프레임워크 제한으로 인해 이것이 실현 가능하지 않을 수 있다는 점에 유의하는 것이 중요합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3