"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Puedo modificar métodos de clase sin herencia en PHP?

¿Puedo modificar métodos de clase sin herencia en PHP?

Publicado el 2024-11-17
Navegar:476

Can I Modify Class Methods Without Inheritance in PHP?

¿Puedo parchear una clase sin herencia?

Puede encontrar situaciones en las que necesite modificar una clase o sus métodos sin la opción de herencia típica. Tomemos, por ejemplo, la siguiente clase:

class third_party_library {
    function buggy_function() {
        return 'bad result';
    }
    function other_functions(){
        return 'blah';
    }
}

Es posible que desee reemplazar el método buggy_function() con una implementación más deseable, pero hacerlo mediante herencia no es factible. PHP no admite de forma nativa el parcheo de monos, lo que le permite modificar las clases después de haberlas definido.

Una posible solución es utilizar la biblioteca PECL runkit, que proporciona una función runkit_method_redefine(). Esto le permite modificar métodos evaluando cadenas de código:

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

Este enfoque, sin embargo, tiene desventajas. Modificar el código mediante la evaluación de cadenas puede ser peligroso y la depuración puede ser un desafío.

Otra alternativa es considerar agregar una función a la clase en lugar de modificar una existente. En algunos lenguajes, como C#, esto es posible usando "clases parciales". Sin embargo, es importante tener en cuenta que esto puede no ser factible debido a limitaciones del marco en su caso específico.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3