it-swarm.dev

Come risolvere l'avviso `Standard rigorosi` per firme di metodi diversi nelle versioni di Joomla

Nell'aggiornamento di un'estensione per supportare Joomla 3.x ci siamo imbattuti in alcuni casi in cui la firma per una funzione è cambiata dalla 2.5 e si traduce in un avviso Strict standards.

Ad esempio nella classe JTable la _getAssetParentId() era cambiata da

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

a questo in Joomla 3.x:

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

È una piccola differenza, ma è sufficiente lanciare l'avvertimento.

Guardando altre estensioni che supportano Joomla 2.5 e 3.0 usando un singolo file di classe sembrano semplicemente ignorare il problema.

Ovviamente, se aggiustiamo l'avviso per 3.x quindi 2.5 installa con lancio l'avvertimento ...

Le "soluzioni" che non sono un'opzione per noi includono:

  • utilizzando due file di classe specifici della versione separati
  • disattivando gli avvisi

Come risolvi questo conflitto?

7
Craig

Al lavoro cerchiamo di risolvere tutti i PHP avvertenze, errori e violazioni degli standard rigorosi. In situazioni come questa, in cui le firme sono diverse, non c'è modo di risolverle utilizzando due classi separate, specifiche della versione Sono curioso, però, perché non è un'opzione per te?

I file di classe specifici della versione sono in realtà semplici da implementare, ma un po 'più difficili da mantenere, poiché aggiornerai del codice in più punti. La cosa migliore da fare in questa situazione, IMO, è avere un root src/ cartella che contiene tutte le classi dei componenti per il caricamento automatico, quindi avere qualsiasi classe specifica della versione 2.5 o 3.x in un overrides/$VERSION cartella. È quindi possibile impostare il caricatore automatico in modo da cercare nei punti appropriati nell'ordine appropriato, in base alla versione corrente.

Vorrei davvero che ci fosse un modo più semplice, ma PHP non consente il sovraccarico del metodo dinamico in cui è possibile far corrispondere le firme.

9
Don Gilbert

Per quanto ne sappia, non è possibile risolvere questo severo avvertimento. Perché le firme saranno sempre diverse in 2.5 o 3.x.

Correggilo per 3.x e ignora in 2.5 o viceversa.

In un ambiente produttivo, non dovresti mai vedere questo avviso in quanto dovresti mostrare solo avvisi rigorosi nelle impostazioni di sviluppo.

4
Bakual

C'è un grosso problema con lo stato di PHP, alcuni server usano ancora 5.2, mentre altri rimangono al sicuro a 5.3 o 5.4. Ci sono anche alcuni che rimangono aggiornati a 5.5.

Ciò porta a un grave problema in "cosa supportare" Se si va dal mercato delle varie versioni, direi che 5.2 è il più usato, ma insicuro. 5.3 e 5.4 sono ciò che Joomla cerca in 3, tuttavia se un utente è in 5.5 gli avvisi standard rigidi potrebbero essere diversi rispetto alle altre versioni.

Anche se PHP non va oltre gli errori, poiché in esso "funziona" ancora il suo avvertimento che il modo in cui è stato fatto non è come la versione corrente intende gestirlo, ma continuerà comunque Quindi, per la maggior parte degli sviluppatori, gli avvisi di Notice e Standard rigorosi possono essere per lo più ignorati poiché se risolvi uno potresti attivarne un altro in una diversa PHP.

Rimuoverli tutti è meglio per uno sviluppatore OCD. Dovrebbero essere corretti errori evidenti, ma quelli come quelli che descrivi porterebbero a focalizzare Joomla su uno PHP a molto, portando a molto più lavoro per aggiornare il suo PHP anche la versione.

L'unica vera correzione a questo è nel "bootstrap" di Joomla per testare la PHP e caricare i file in base a ciò, questo potrebbe portare a raddoppiare la dimensione di installazione della base di Joomla, oltre ad essere un modo si dovrebbe quindi lavorare di più per errori che in realtà non rompono alcun sito. La risposta di Don Gilbert approfondisce alcuni dettagli.

La mia risposta è un po 'strana, ma credo che possa aiutare gli altri a capire il disordine totale PHP è.

1
Jordan Ramstad