継承せずにメソッドをオーバーライドするにはどうすればよいですか: PHP でのモンキー パッチの探索

DDD
リリース: 2024-11-11 17:16:02
オリジナル
863 人が閲覧しました

How Can You Override Methods Without Inheritance: Exploring Monkey Patching in PHP?

継承を使用しないメソッドのオーバーライド: モンキー パッチの探索

特定のシナリオでは、依存せずにクラス メソッドまたはクラス全体を再定義する必要がある場合があります。伝統的な継承について。次の例を考えてみましょう:

class third_party_library {
    function buggy_function() {
        return 'bad result';
    }
    function other_functions(){
        return 'blah';
    }
}
ログイン後にコピー

この例では、「buggy_function」をオーバーライドする必要があります。フレームワークによる制限のため、継承は現実的ではありません。したがって、「モンキー パッチ」と呼ばれる別のアプローチを検討してみましょう。

モンキー パッチでは、ソース コードを変更せずに既存のクラスを変更します。 PHP はネイティブではモンキー パッチをサポートしていませんが、runkit ライブラリを利用してこの機能を導入できます。

Runkit はメソッドの再定義を可能にする「runkit_method_redefine」関数を提供します。以下に例を示します。

runkit_method_redefine('third_party_library', 'buggy_function', '',
    'return \'good result\''
);
ログイン後にコピー

この変更では、元のメソッド名とパラメーターを保持しながら、必要な機能を提供します。 runkit は潜在的なソリューションですが、変更のためにコード文字列を評価すると、潜在的なリスクとデバッグの課題が生じることに注意することが重要です。それにも関わらず、runkit_method_redefine は、継承を伴わないメソッドのオーバーライドが必要な状況に役立つ代替手段を提供します。

以上が継承せずにメソッドをオーバーライドするにはどうすればよいですか: PHP でのモンキー パッチの探索の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート