So lösen Sie die Warnung "Strenge Standards" für verschiedene Methodensignaturen in Joomla-Versionen

7

Bei der Aktualisierung einer Erweiterung zur Unterstützung von Joomla 3.x sind einige Fälle aufgetreten, in denen sich die Signatur für eine Funktion seit 2.5 geändert hat und eine Strict standardsWarnung angezeigt wird.

Zum Beispiel in der JTable-Klasse _getAssetParentId()hatte sich das von geändert

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

dazu in Joomla 3.x:

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

Es ist ein kleiner Unterschied, aber es reicht aus, um die Warnung auszulösen.

Wenn Sie sich andere Erweiterungen ansehen, die Joomla 2.5 und 3.0 mit einer einzelnen Klassendatei unterstützen, scheinen sie das Problem einfach zu ignorieren.

Wenn wir die Warnung für 3.x korrigieren, wird 2.5 natürlich mit der Warnung installiert…

"Lösungen", die für uns keine Option sind, umfassen:

  • Verwenden von zwei separaten versionenspezifischen Klassendateien
  • Warnungen ausschalten

Wie lösen Sie diesen Konflikt?

Craig
quelle

Antworten:

9

Bei der Arbeit versuchen wir, alle PHP-Warnungen, Fehler und strengen Standardverstöße zu beheben. In solchen Situationen, in denen die Signaturen unterschiedlich sind, gibt es keine Möglichkeit, sie mithilfe von zwei separaten, versionsspezifischen Klassendateien aufzulösen. Ich bin allerdings neugierig, warum das für Sie keine Option ist.

Versionsspezifische Klassendateien sind eigentlich einfach zu implementieren, aber etwas schwieriger zu warten, da Sie Code an mehreren Stellen aktualisieren. Das Beste, was Sie in dieser Situation tun können, ist, einen src/Stammordner zu haben , der alle Komponentenkomponenten zum automatischen Laden enthält, und dann alle Versionen der Version 2.5 oder 3.x in einem overrides/$VERSIONOrdner zu haben. Anschließend können Sie den Autoloader so einrichten, dass er an den entsprechenden Stellen in der entsprechenden Reihenfolge basierend auf der aktuellen Version sucht.

Ich wünschte wirklich, es gäbe einen einfacheren Weg, aber PHP erlaubt keine dynamische Methodenüberladung, bei der die Signaturen übereinstimmen können.

Don Gilbert
quelle
Für Erweiterungen, die wir öffentlich zugänglich machen, ist dies kein Problem. Wir beheben die neueste Joomla-Version und lassen die ältere Version die Warnungen behandeln. Die fragliche Erweiterung gilt jedoch für einige unserer Kunden, die eine extrem hohe "Sicherheits" -Anforderung haben, dass Erweiterungen von Drittanbietern unter strengen Bedingungen ohne Warnungen ausgeführt werden können. Es sieht so aus, als hätten wir in Zukunft zwei Versionen.
Craig
4

Meines Wissens können Sie diese strenge Warnung nicht lösen. Weil die Signaturen in 2.5 oder 3.x immer unterschiedlich sind.

Beheben Sie es entweder für 3.x und ignorieren Sie es in 2.5 oder umgekehrt.

In einer produktiven Umgebung sollten Sie diese Warnung sowieso nie sehen, da Sie nur strenge Warnungen in den Entwicklungseinstellungen anzeigen sollten.

Bakual
quelle
Ja, das war unser Gedanke, es sieht so aus, als hätten wir in Zukunft zwei Versionen.
Craig
1

Es gibt ein großes Problem mit dem Status von PHP, einige Server verwenden immer noch 5.2, während andere bei 5.3 oder 5.4 sicher bleiben. Es gibt auch einige, die bei 5,5 aktuell bleiben.

Dies führt zu einem großen Problem bei der Frage, was zu unterstützen ist. Wenn Sie sich für den Markt der verschiedenen Versionen entscheiden, würde ich sagen, dass 5.2 am weitesten verbreitet, aber unsicher ist. 5.3 und 5.4 sind das, wonach Joomla in 3 sucht. Wenn sich ein Benutzer jedoch in 5.5 befindet, können die strengen Standardwarnungen von den anderen Versionen abweichen.

Obwohl PHP die Fehler nicht übertrifft, "funktioniert" es immer noch seine Warnung, dass die Art und Weise, wie es gemacht wird, nicht so ist, wie die aktuelle Version damit umgehen soll, sondern trotzdem funktioniert. Daher können für die meisten Entwickler die Warnungen von Notice und Strict Standards größtenteils ignoriert werden, da Sie, wenn Sie eine beheben, möglicherweise eine andere in einer anderen PHP-Version auslösen.

Das Entfernen aller Elemente ist für einen OCD-Entwickler am besten. Offensichtliche Fehler sollten behoben werden, aber solche, wie Sie sie beschreiben, würden dazu führen, dass Joomla zu stark auf eine PHP-Version fokussiert wird, was zu viel mehr Arbeit beim Upgrade der PHP-Version führen würde.

Die einzig wahre Lösung hierfür ist Joomlas "Bootstrap", um die PHP-Version zu testen und darauf basierende Dateien zu laden. Dies könnte zu einer Verdoppelung der Joomla-Basisinstallationsgröße führen und viel mehr Arbeit leisten, als für Fehler erforderlich ist Brechen Sie keine Website. Don Gilberts Antwort geht näher darauf ein.

Meine Antwort ist seltsam, aber ich denke, sie kann anderen helfen, das totale Durcheinander von PHP zu verstehen.

Jordan Ramstad
quelle