継承を使用せずにクラスまたはそのメソッドを再定義するという問題は、多くの開発者を困惑させてきました。提供されている例は、サードパーティのライブラリの更新によってバグのある関数 (buggy_function) が導入され、ライブラリの直接の変更を避けながらその関数を変更する必要があるというシナリオを示しています。
モンキー パッチ はその手法です。これを達成するために採用されました。ただし、PHP はネイティブではモンキー パッチをサポートしていません。
runkite ライブラリ を使用して、モンキー パッチ機能を PHP に追加できます。 runkit_method_redefine 関数が提供されており、クラス内の特定の関数の動作を再定義できます。
runkit_method_redefine を使用して buggy_function を置き換える方法は次のとおりです。
runkit_method_redefine('third_party_library', 'buggy_function', '', 'return \'good result\'');
これにより再定義されます。 buggy_function メソッドを使用して、元の「悪い結果」の代わりに「良い結果」を返します。関数本体を文字列として指定する必要があることに注意することが重要です。
モンキー パッチは便利な手法ですが、文字列の評価とデバッグに落とし穴がある可能性があるため、慎重に使用する必要があります。
以上がPHP で継承を使用せずにクラス メソッドを再定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。