「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP で継承せずにクラスメソッドを変更できますか?

PHP で継承せずにクラスメソッドを変更できますか?

2024 年 11 月 17 日に公開
ブラウズ:931

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 は、定義後にクラスを変更できるモンキー パッチをネイティブにサポートしていません。

考えられる解決策の 1 つは、runkit_method_redefine() 関数を提供する PECL runkit ライブラリを使用することです。これにより、コード文字列を評価してメソッドを変更できるようになります:

runkit_method_redefine('third_party_library', 'buggy_function', '',
    'return \'good result\''
);

ただし、このアプローチには欠点があります。文字列評価によるコードの変更は危険を伴う可能性があり、デバッグが困難になる場合があります。

もう 1 つの方法は、既存の関数を変更するのではなく、クラスに関数を追加することを検討することです。 C# などの一部の言語では、「部分クラス」を使用してこれが可能です。ただし、特定のケースではフレームワークの制限により、これが実現できない可能性があることに注意することが重要です。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3