"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 > ¿Cómo obtener el nombre de la clase de una clase PHP extendida en una llamada a un método estático?

¿Cómo obtener el nombre de la clase de una clase PHP extendida en una llamada a un método estático?

Publicado el 2024-11-10
Navegar:491

How to Get the Class Name from an Extended PHP Class in a Static Method Call?

Obtención del nombre de la clase a partir de una llamada estática de clase PHP extendida

En la programación orientada a objetos, las clases a menudo extienden las clases base para heredar y ampliar su funcionalidad . Un escenario común implica la necesidad de obtener el nombre de la clase a partir de una llamada a un método estático en una clase extendida, a pesar de que CLASS siempre devuelve el nombre de la clase que la define.

Problema: inaccesibilidad del nombre de la clase en los métodos estáticos principales

Considere un escenario con dos clases, Acción y MiAcción, donde MiAcción extiende Acción. Acción define un método estático, n(), que es inaccesible a través de la constante CLASS dentro de los métodos estáticos principales, lo que da como resultado la CLASS el valor se establece en "Acción" independientemente de la llamada clase.

Soluciones:

1. Enlaces estáticos tardíos (PHP 5.3):

Los enlaces estáticos tardíos le permiten determinar la clase de destino de una llamada a un método estático en tiempo de ejecución en lugar de cuando se define el método. Esto se logra usando la función get_Called_class(), que devuelve el nombre de la clase en la que se llamó el método estático.

Por ejemplo:

class Action {
    public static function n() {
        return get_called_class();
    }
}

class MyAction extends Action {

}

echo MyAction::n(); // Outputs "MyAction"

2. Usando get_class($this) (solo métodos no estáticos):

Si el método en cuestión no es estático, puede usar get_class($this) para obtener la clase nombre desde el cual se llamó el método.

Por ejemplo:

class Action {
    public function n() {
        echo get_class($this);
    }
}

class MyAction extends Action {

}

$foo = new MyAction;
$foo->n(); // Outputs "MyAction"

Conclusión:

Tanto los enlaces estáticos tardíos como get_class($this) ofrecen soluciones para recuperar el nombre de la clase de una llamada a un método estático en un clase extendida. Los enlaces estáticos tardíos son preferibles para métodos estáticos, mientras que get_class($this) es útil para métodos no estáticos.

Ú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