ti-enxame.com

Como resolver o aviso de `Strict standards` para diferentes assinaturas de método nas versões do Joomla

Ao atualizar uma extensão para dar suporte ao Joomla 3.x, encontramos alguns casos em que a assinatura de uma função mudou desde 2,5 e resulta em um aviso Strict standards.

Por exemplo, na classe JTable, a _getAssetParentId() mudou de

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

para isso no Joomla 3.x:

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

É uma pequena diferença, mas é suficiente para lançar o aviso.

Olhando para outras extensões que suportam o Joomla 2.5 e 3.0 usando um arquivo de classe única, elas parecem simplesmente ignorar o problema.

Obviamente, se corrigirmos o aviso para 3.x, o 2.5 será instalado com o aviso…

As "soluções" que não são uma opção para nós incluem:

  • usando dois arquivos de classe específicos da versão separada
  • desligando os avisos

Como você resolve esse conflito?

7
Craig

No trabalho, tentamos resolver todas as PHP avisos, erros e violações estritas dos padrões. Em situações como essa, onde as assinaturas são diferentes, não há como resolver isso usando outra classe específica de versão separada Estou curioso, porém, por que isso não é uma opção para você?

Os arquivos de classe específicos da versão são realmente simples de implementar, mas um pouco mais difíceis de manter, pois você estará atualizando algum código em vários locais. A melhor coisa a fazer nessa situação, a IMO, é ter uma raiz src/ pasta que contém todas as suas classes de componente para carregamento automático e, em seguida, possui classes específicas da versão 2.5 ou 3.x em um overrides/$VERSION pasta. Você pode configurar o carregador automático para procurar nos locais apropriados na ordem apropriada, com base na versão atual.

Eu realmente gostaria que houvesse uma maneira mais fácil, mas PHP não permite sobrecarga de método dinâmico, onde você pode fazer as assinaturas corresponderem).

9
Don Gilbert

Que eu saiba, você não pode resolver esse aviso estrito. Porque as assinaturas sempre serão diferentes em 2.5 ou 3.x.

Corrija-o para 3.xe ignore em 2.5 ou vice-versa.

Em um ambiente produtivo, você nunca deve ver esse aviso, pois deve mostrar apenas avisos estritos nas configurações de desenvolvimento.

4
Bakual

Há um grande problema com o estado do PHP, alguns servidores ainda usam 5.2, enquanto outros permanecem seguros em 5.3 ou 5.4. Há também alguns que permanecem atualizados em 5,5.

Isso leva a um grande problema em "o que oferecer suporte" Se você for ao mercado das várias versões, eu diria que o 5.2 é o mais amplamente usado, mas inseguro. 5.3 e 5.4 são o que o Joomla procura em 3; no entanto, se um usuário estiver em 5.5, os estritos avisos padrão podem ser diferentes das outras versões.

Embora PHP não exagere nos erros, como ainda funciona ", ele avisa que a maneira como é feita não é como a versão atual deve lidar com isso, mas ainda assim Portanto, para a maioria dos desenvolvedores, os avisos de aviso e de padrões estritos podem ser ignorados, pois se você corrigir um, poderá acionar outro em uma versão diferente PHP.

A remoção de todos é melhor para um desenvolvedor de TOC. Erros óbvios devem ser corrigidos, mas erros como você descrevem levariam o Joomla a concentrar-se em uma PHP em muito, levando a muito mais trabalho para atualizar sua PHP versão também.

A única correção verdadeira para isso está no "bootstrap" do Joomla para testar a versão PHP e carregar arquivos com base nisso, isso pode levar à duplicação do tamanho da instalação básica do Joomla, além de ser uma maneira mais trabalho deve ser feito para erros que não quebram nenhum site.A resposta de Don Gilbert entra nisso com mais detalhes.

Minha resposta é meio estranha, mas acho que isso pode ajudar outras pessoas a entender a bagunça total PHP é.

1
Jordan Ramstad