Modo estricto de PHP 5.2: ¿Por qué no se permiten métodos de clases estáticas abstractas?
En PHP 5.2, habilitar advertencias estrictas puede desencadenar una advertencia familiar : "La función estática no debe ser abstracta". Esta advertencia surge de un cambio introducido en PHP 5.2, que no permite métodos de clases estáticas abstractas.
La razón: un descuido histórico
PHP 5.2 inicialmente carecía de enlaces estáticos tardíos, Inutilizar funciones estáticas abstractas. Como la palabra clave self en los métodos estáticos abstractos se refería a la clase principal, no a la clase secundaria en la que se invocaba el método, dichos métodos no tenían significado práctico. Por lo tanto, la advertencia tenía como objetivo detectar y prevenir posibles errores de codificación.
Enlaces estáticos tardíos y justificación defectuosa
En PHP 5.3, se introdujeron enlaces estáticos tardíos, lo que permitió Los métodos estáticos de las clases secundarias se llamarán desde los métodos principales utilizando la palabra clave estática. Esto eliminó la barrera técnica que había hecho inútiles los métodos estáticos abstractos. Sin embargo, la advertencia persistió en PHP 5.2 basándose en un argumento débil: que exponer métodos estáticos abstractos podría resultar en métodos públicos rotos.
Una percepción falsa
La justificación de la advertencia fue errónea. Los métodos estáticos abstractos podrían coexistir con enlaces estáticos tardíos, proporcionando un caso de uso válido para invocar métodos estáticos de clases secundarias desde métodos principales.
Confusión y una respuesta inexacta
A El informe de error de PHP que solicitaba la eliminación de la advertencia debido a la adición de enlaces estáticos tardíos recibió una respuesta desdeñosa de Rasmus Lerdorf. Declaró erróneamente que los métodos estáticos abstractos con enlaces estáticos tardíos eran funcionales, lo cual era incorrecto ya que aún activaban la advertencia. Esta confusión y falta de claridad llevó a la persistencia de la advertencia.
La resolución en PHP 7
Afortunadamente, PHP 7 finalmente rectificó este problema, reclasificando esta advertencia. a un simple aviso. Con la introducción de PHP 7, los métodos estáticos abstractos son totalmente compatibles y se pueden utilizar de forma segura sin generar advertencias.
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