Warnung: sizeof (): Der Parameter muss ein Array oder ein Objekt sein, das Countable php7.2 implementiert


Natsu

Ich habe auf PHP 7.2 aktualisiert und es wurde ein Array (kein Wortspiel beabsichtigt) von Problemen erstellt. Ich habe sie ausgeschaltet (meistens diese Warnungen in Größe und Anzahl (). Der einzige Fehler, den wir haben:

Warnung: sizeof (): Der Parameter muss ein Array oder ein Objekt sein, das Countable in /usr/www/domain/phpmyd/includes/class_registry.php in Zeile 236 implementiert

Ich habe versucht, es so zu beheben:
if (sizeof($this->config) < 1) {
Dazu:
if (!empty($this->config) &&(sizeof($this->config) < 1)) {

Aber es entstehen viel mehr Fehler, die unten gezeigt werden. Wir haben diesen jedoch auf die gleiche Weise behoben und es funktioniert perfekt. Ändern Sie dies:
if (0 < sizeof($this->language)) {
Zu diesem:
if (!empty($this->language) && (0 < sizeof($this->language))) {

Nahm im Grunde den gleichen Fehler weg. Denken Sie jetzt daran, dass die obige Warnung der EINZIGE verbleibende Fehler ist. Alles andere funktioniert einwandfrei. Wenn ich jedoch die Warnung "behebe", erhalte ich eine Reihe von Fehlern, die die Website beschädigen und irrelevant erscheinen. Wenn ich also diese erste Zeichenfolge ersetze, erscheinen alle diese Fehler:

  • Warnung: Verwendung der undefinierten Konstante ADDON_DISCOUNT_CODES - angenommen 'ADDON_DISCOUNT_CODES' (dies wird einen Fehler in einer zukünftigen Version von PHP auslösen) in /usr/www/domainlistings/phpmyd/index.php in Zeile 6
  • Warnung: Verwendung der undefinierten Konstante ADDON_BLOG - angenommen 'ADDON_BLOG' (dies wird einen Fehler in einer zukünftigen Version von PHP auslösen) in /usr/www/domainlistings/phpmyd/cp/template/default/admin_header.tpl in Zeile 134
  • Warnung: Verwendung der undefinierten Konstante ADDON_LINK_CHECKER - angenommen 'ADDON_LINK_CHECKER' (dies wird einen Fehler in einer zukünftigen Version von PHP auslösen) in /usr/www/domainlistings/phpmyd/cp/template/default/admin_header.tpl in Zeile 179

Diese Fehler traten NICHT auf und diese Dinge funktionierten perfekt, bis ich mich änderte if (sizeof($this->config) < 1) {

Wie ist das verbunden? Ich bin mir nicht sicher, was hier passiert, wie diese eine Zeile diese anderen (scheinbar irrelevanten) Dinge machen oder brechen kann. Vollständiger Code des Anfangsproblems (Zeile 236):

/**
     * Get a configuration value
     * @param string $key
     * @return mixed
     */
    public function getConfig($key) {
        if (sizeof($this->config) < 1) {
            $this->loadConfig();
        }
        return isset($this->config[$key]) ? $this->config[$key] : false;
    }

Irgendwelche Ideen?

emix

Für den Anfang nicht verwenden sizeof, aber count;) billige Verbesserung - immer einen Opcode weniger.

Stellen Sie zweitens sicher, dass Sie ein Array übergeben, nicht null oder was auch immer Sie dort haben, z.

// dirty fix
if (count((array) $this->config) > 0) {
    …
}

Um dies richtig zu beheben, sollten Sie diese Eigenschaft nullsowieso nicht zulassen . Wenn Sie nach einem verzögerten Laden suchen, überprüfen Sie, ob die Variable null oder kein Array ist, z.

public function getConfig($key, $default = false)
{
    if (!is_array($this->config)) {
        // make sure it becomes one after the load
        $this->loadConfig();
    }

    return $this->config[$key]) ?? $default;
}

Verwandte Artikel