Aktueller Standort: Startseite> Neueste Artikel> Wie kann man vermeiden, unzählige Variablen über IS_Countable () -Funktion an Schleifenstrukturen zu übergeben?

Wie kann man vermeiden, unzählige Variablen über IS_Countable () -Funktion an Schleifenstrukturen zu übergeben?

M66 2025-08-04

Bei der täglichen PHP -Entwicklung müssen wir häufig Arrays oder Objekte durchqueren. Aufgrund der dynamischen Art von PHP können wir jedoch nicht immer sicherstellen, dass die eingehenden Variablen zählbar sind (dh die Implementierung der zählbaren Schnittstelle oder eines Arrays). Wenn Sie Count () direkt in einer unzähligen Variablen verwenden oder einen Foreach -Traversal ausführen, kann dies zu Fehlern oder Warnungen führen, insbesondere wenn Sie mit instabilen externen Daten zu tun haben.

Um dieses Problem zu lösen, führte PHP 7.3 die Funktion is_countable () ein, mit der festgestellt wird, ob eine Variable vor dem Aufruf von Count () zählbar ist. Dies verbessert die Robustheit und Verwerfungstoleranz des Codes erheblich.

1. Einführung in die Funktion is_countable ()

is_countable () ist eine integrierte Funktion, die von Php 7.3+ bereitgestellt wird, mit der festgestellt wird, ob Variablen in die Funktion count () übergeben werden können. Der Funktionsprototyp lautet wie folgt:

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">is_countable</span></span><span>(</span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span>)
</span></span>

Der Rückgabewert ist ein boolescher Wert. Wenn es sich bei der Variablen um ein Array handelt oder die zählbare Schnittstelle implementiert ist, gibt sie True zurück. Ansonsten kehrt es falsch zurück.

2. häufig gestellte Fragen

Angenommen, wir erhalten eine Reihe von Daten von einer externen API und versuchen, sie zu durchqueren:

 <span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_data_from_api</span></span><span>();

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$item</span></span><span>) {
    </span><span><span class="hljs-comment">// Verarbeiten Sie jeden Artikel</span></span><span>
}
</span></span>

Idealerweise ist $ Data ein Array oder ein iterierbares Objekt. Wenn die API jedoch Null , String oder Boolean zurückgibt, wird der obige Code eine Warnung oder einen Fehler werfen.

3.. Verwenden Sie die richtige Haltung von is_countable ()

Um dies zu vermeiden, können wir iS_Countable () verwenden, um vor dem Durchlaufen von Urteilen zu urteilen:

 <span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_data_from_api</span></span><span>();

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_countable</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>)) {
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$item</span></span><span>) {
        </span><span><span class="hljs-comment">// 安全地Verarbeiten Sie jeden Artikel</span></span><span>
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-comment">// Optional:Standardverhalten anmelden oder verarbeiten</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"Unzählbare Datentypen empfangen。"</span></span><span>);
}
</span></span>

Auf diese Weise stürzt das Programm nicht, selbst wenn die zurückgegebenen Null- , Ganzzahl- oder andere unzählige Typen nicht abgestürzt werden, was die Robustheit des Systems verbessert.

4. Der Unterschied zu is_array ()

Viele Entwickler verwenden IS_Array () vor PHP 7.3, um festzustellen, ob es zählen kann. Obwohl dies in vielen Szenarien möglich ist, identifiziert es keine Objekte, die die zählbare Schnittstelle implementieren. Zum Beispiel:

 <span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">MyCollection</span></span><span> </span><span><span class="hljs-keyword">implements</span></span><span> </span><span><span class="hljs-title">Countable</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">count</span></span><span>(</span><span><span class="hljs-params"></span></span><span>): </span><span><span class="hljs-title">int</span></span><span> {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-number">0</span></span><span>;
    }
}

</span><span><span class="hljs-variable">$collection</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">MyCollection</span></span><span>();
</span></span>

zu diesem Zeitpunkt:

 <span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$collection</span></span><span>); </span><span><span class="hljs-comment">// false</span></span><span>
</span><span><span class="hljs-title function_ invoke__">is_countable</span></span><span>(</span><span><span class="hljs-variable">$collection</span></span><span>); </span><span><span class="hljs-comment">// true</span></span><span>
</span></span>

Daher sollte in modernen PHP is_countable () anstelle von is_array () + count () kombinatorische Logik verwendet werden.

5. Praktischer Rat

  1. Typprüfungen werden an externen Eingängen durchgeführt : insbesondere Strukturen wie Datenbankabfragen und API -Antworten, die möglicherweise leer sind.

  2. Unified Encapsulation Beurteilung Logik : Die Überprüfung von IS_Countable () kann als allgemeine Werkzeugfunktion eingekapselt werden, um den Code sauber zu halten.

  3. Kombinieren Sie Typ -Eingabeaufforderungen und statische Analysewerkzeuge : wie Phpstan oder Psalm kann das Risiko eines unbekannten Typs weiter verringern.

6. Schlussfolgerung

Is_Countable () ist ein kleines und leistungsstarkes Tool, mit dem wir uns bei der Umstellung mit ungewissen Datenstrukturen wohler fühlen können. Wenn Sie diese Funktion gut nutzen, können Sie nicht nur Laufzeitfehler vermeiden, sondern auch robustere und leicht zu macht angehaltene PHP-Anwendungen schreiben.