"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP에서 상속 없이 클래스 메서드를 수정할 수 있나요?

PHP에서 상속 없이 클래스 메서드를 수정할 수 있나요?

2024년 11월 17일에 게시됨
검색:944

Can I Modify Class Methods Without Inheritance in PHP?

상속 없이 클래스를 원숭이 패치할 수 있나요?

일반적인 상속 옵션 없이 클래스나 해당 메서드를 수정해야 하는 상황이 발생할 수 있습니다. 예를 들어 다음 클래스를 살펴보겠습니다.

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