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 foreach
Schleife 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?
functions
customization
MinhTri
quelle
quelle
Antworten:
In jeder
foreach
Schleife bleibt der letzte Wert des Arrays, über das eine Schleife durchgeführt wird, nach dem Ende derforeach
Schleife. Deshalb sollte man diesen Wert eigentlich immer deaktivieren, nachdem dieforeach
Schleife fertig ist.wp_list_pluck()
ist auch nur eine Grundschleifeforeach
, wenn$index_key
nicht übergeben wird. Wie bei jederforeach
Schleife bleibt auch der letzte Wert des Arrays nach dem Ende derforeach
Schleife, 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 derforeach
Schleife 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 einfacheforeach
Schleife. 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_column
da es genauso funktioniert, wenn$index_key
es an die Funktion übergeben wirdquelle
unset( $value )
nach einerforeach
Schleife gelernt habe,wp_reset_postdata()
wenn Siesetup_postdata( $post )
in einerforeach
Schleife verwendet haben, undreset()
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