継承を使用しないメソッドのオーバーライド: モンキー パッチの探索
特定のシナリオでは、依存せずにクラス メソッドまたはクラス全体を再定義する必要がある場合があります。伝統的な継承について。次の例を考えてみましょう:
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 サイトの他の関連記事を参照してください。