Wann sollten Sie wp_list_pluck () verwenden und wann nicht?

10

Beim Erlernen des verzögerten Ladens von Metadaten habe ich folgende Codezeilen kennengelernt :

// Don't use `wp_list_pluck()` to avoid by-reference manipulation.
$comment_ids = array();
if ( is_array( $comments ) ) {
    foreach ( $comments as $comment ) {
        if ( $comment instanceof WP_Comment ) {
            $comment_ids[] = $comment->comment_ID;
        }
    }
} 

Ich dachte, es bezieht sich auf dieses Thema, aber es gibt hier keine Referenzen und die einzige foreachSchleife ist in eine Funktion eingeschlossen. Wie kann in diesem Fall eine Manipulation durch Referenz erfolgen?

Und wann sollten wir für bewährte Verfahren die wp_list_pluck()Funktion verwenden?

MinhTri
quelle
Ich bin bei dir, fwiw. Ich habe mir die Funktionsquelle, den Codex und die Entwicklungsdokumente angesehen und kann nicht sehen, worauf sich dieser Kommentar bezieht.
Andy Macaulay-Brook

Antworten:

3

In jeder foreachSchleife bleibt der letzte Wert des Arrays, über das eine Schleife durchgeführt wird, nach dem Ende der foreachSchleife. Deshalb sollte man diesen Wert eigentlich immer deaktivieren, nachdem die foreachSchleife fertig ist.

wp_list_pluck()ist auch nur eine Grundschleife foreach, wenn $index_keynicht übergeben wird. Wie bei jeder foreachSchleife bleibt auch der letzte Wert des Arrays nach dem Ende der foreachSchleife, und ich denke, darauf bezieht sich diese Zeile im Codex.

Diese Annahme ist jedoch falsch. Funktionen sind in sich geschlossene Codeteile, und mit Ausnahme von globalen Codeteilen sind diese Codeteile innerhalb einer Funktion nur für die Funktion selbst verfügbar. wp_list_pluck()globalisiert keinen seiner internen Werte ( Variablen ). Selbst wenn der letzte Wert des Arrays nach der foreachSchleife innerhalb der Funktion noch verfügbar ist und nicht aufgehoben wird, steht er keinem Code außerhalb der Funktion zur Verfügung. Sie können also nicht das Problem der Pass-by-Reference haben, wie in dieser Zeile im Codex beschrieben.

wp_list_pluck()ist genauso gültig wie jede einfache foreachSchleife. Die Wahl liegt bei Ihnen. Ich persönlich bevorzuge es, wp_list_pluck()da es Code spart und Sie nicht daran denken müssen, Variablen zu deaktivieren, die später zum Debuggen von Albtraum führen können.

Nur eine letzte Anmerkung, wp_list_pluck()kann auch ersetzen, array_columnda es genauso funktioniert, wenn $index_keyes an die Funktion übergeben wird

Pieter Goosen
quelle
Deaktivieren oder zurücksetzen?
Fuxia
@toscho AFAIK und von dem, was ich unset( $value )nach einer foreachSchleife gelernt habe, wp_reset_postdata()wenn Sie setup_postdata( $post )in einer foreachSchleife verwendet haben, und reset() setzt den internen Zeiger zurück auf das erste Element in einem Array. Wenn ich falsch liege oder wenn Sie etwas anderes oder anderes hinzufügen möchten, sollten Sie dies in einer Antwort tun, damit wir alle davon profitieren. IMHO, das ist eine Frage, von der der Großteil der Community profitieren kann. Wenn ich falsch liege, korrigiere mich dann und poste eine richtige Antwort
Pieter Goosen