継承を使用しないクラス メソッドの再定義
ライブラリ自体を変更せずに、サードパーティ ライブラリ内のメソッドを再定義したいとします。 PHP は、クラスやメソッドを動的に変更する手法であるモンキー パッチをネイティブにサポートしていないため、これは困難になる可能性があります。
runkit などのライブラリは利用可能ですが、文字列の評価とデバッグに潜在的な問題があるため注意が必要です。 .
RunKit を使用したモンキー パッチ
RunKit の runkit_method_redefine 関数は、クラスのバイトコードを操作してメソッドを再定義する方法を提供します。使用するには:
runkit_method_redefine('third_party_library', 'buggy_function', '', 'return \'good result\';');
このアプローチにより、バグのある関数を置き換えながら元のクラスを維持できます。
クラスへの関数の追加
または、元のメソッドをそのまま維持したまま、クラスに新しい関数を追加することもできます。 「部分クラス」は C# で使用できますが、PHP には同等の機能がありません。
新しい関数を追加するには、次の構文を使用できます。
class ThirdPartyLibraryExtended { function my_good_function() { return 'good result'; } } $thirdPartyLibrary = new ThirdPartyLibraryExtended(); $thirdPartyLibrary->my_good_function();
これにより追加されます。既存のメソッドを再定義せずに、my_good_function メソッドを ThirdPartyLibrary に追加します。
以上が継承せずに PHP でクラスメソッドを再定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。