it-swarm-es.tech

Cómo resolver la advertencia de `estándares estrictos` para diferentes firmas de métodos en las versiones de Joomla

Al actualizar una extensión para admitir Joomla 3.x, hemos encontrado algunos casos en los que la firma de una función ha cambiado desde 2.5 y da como resultado una advertencia Strict standards.

Por ejemplo, en la clase JTable, la _getAssetParentId() había cambiado de

protected function _getAssetParentId($table = null, $id = null)
{
    ...
}

a esto en Joomla 3.x:

protected function _getAssetParentId(JTable $table = null, $id = null)
{
    ...
}

Es una pequeña diferencia, pero es suficiente para lanzar la advertencia.

Al mirar otras extensiones que admiten Joomla 2.5 y 3.0 usando un solo archivo de clase, parecen simplemente ignorar el problema.

Obviamente, si arreglamos la advertencia para 3.x, entonces 2.5 se instala con lanzar la advertencia ...

Las "soluciones" que no son una opción para nosotros incluyen:

  • utilizando dos archivos de clase específicos de versiones separadas
  • apagar las advertencias

¿Cómo resuelves este conflicto?

7
Craig

En el trabajo, tratamos de resolver todos PHP advertencias, errores y violaciones estrictas de los estándares. En situaciones como esta, donde las firmas son diferentes, no hay forma de resolverlo usando dos clases separadas de versión específica archivos. Tengo curiosidad por qué esa no es una opción para ti?

Los archivos de clase específicos de la versión en realidad son simples de implementar, pero un poco más difíciles de mantener, ya que actualizará algún código en varios lugares. Lo mejor que se puede hacer en esta situación, IMO, es tener una raíz src/ carpeta que contiene todas las clases de componentes para carga automática, luego tiene cualquier clase específica de versión 2.5 o 3.x en una overrides/$VERSION carpeta. Luego puede configurar el autocargador para buscar en los lugares apropiados en el orden apropiado, según la versión actual.

Realmente desearía que hubiera una manera más fácil, pero PHP no permite la sobrecarga de métodos dinámicos donde puedes hacer que las firmas coincidan.

9
Don Gilbert

Que yo sepa, no puede resolver esta estricta advertencia. Porque las firmas siempre serán diferentes en 2.5 o 3.x.

Puede arreglarlo para 3.xy ignorar en 2.5 o viceversa.

En un entorno productivo, nunca debería ver esta advertencia de todos modos, ya que solo debe mostrar advertencias estrictas en la configuración de desarrollo.

4
Bakual

Hay un problema importante con el estado de PHP, algunos servidores todavía usan 5.2, mientras que otros se mantienen seguros en 5.3 o 5.4. También hay algunos que se mantienen actualizados en 5.5.

Esto lleva a un problema importante en "qué apoyar". Si se pasa por el mercado de varias versiones, diría que 5.2 es la más utilizada, pero insegura. 5.3 y 5.4 son lo que Joomla busca en 3, sin embargo, si un usuario está en 5.5, las advertencias estándar estrictas pueden ser diferentes a las otras versiones.

Aunque PHP no pasa de la parte superior con los errores, ya que todavía "funciona" su advertencia de que la forma en que se hace no es la forma en que la versión actual debe manejarlo, pero seguirá Por lo tanto, para la mayoría de los desarrolladores, las advertencias de Notice and Strict Standards pueden ignorarse en su mayoría, ya que si corrige una, puede activar otra en una versión diferente PHP.

Eliminarlos todos es lo mejor para un desarrollador de OCD. Los errores obvios deben corregirse, pero los que usted describe conducirían a enfocar Joomla a una PHP versión demasiado, lo que llevaría a mucho más trabajo para actualizar su PHP versión también.

La única solución verdadera para esto está en el "bootstrap" de Joomla para probar la versión PHP y cargar archivos basados ​​en eso, esto podría conducir a duplicar el tamaño de instalación base de Joomla, además de ser bastante entonces se debe hacer más trabajo para los errores que realmente no rompen ningún sitio. La respuesta de Don Gilbert entra en esto con más detalle.

Mi respuesta es un poco extraña, pero siento que puede ayudar a otros a entender el desastre total PHP es.

1
Jordan Ramstad