«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Могу ли я изменить методы класса без наследования в PHP?

Могу ли я изменить методы класса без наследования в PHP?

Опубликовано 17 ноября 2024 г.
Просматривать:933

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 не поддерживает исправления обезьян, что позволяет вам изменять классы после того, как они были определены.

Одним из возможных решений является использование библиотеки PECL runkit, которая предоставляет функцию runkit_method_redefine(). Это позволяет вам изменять методы, оценивая строки кода:

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

Однако у этого подхода есть недостатки. Изменение кода посредством вычисления строки может быть опасным, а отладка может оказаться сложной.

Другая альтернатива — рассмотреть возможность добавления функции в класс вместо изменения существующей. В некоторых языках, например C#, это возможно с использованием «частичных классов». Однако важно отметить, что это может оказаться неосуществимым из-за ограничений платформы в вашем конкретном случае.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3