In der PHP -Programmierung ist Array_Fill () eine sehr praktische Funktion zum Erstellen und Ausfüllen eines Arrays. Die Funktionssignatur ist wie folgt:
array array_fill(int $start_index, int $count, mixed $value)
Die Funktion soll an der angegebenen Startindexposition beginnen, ein Array erstellen, das $ Count -Elemente enthält, und es mit dem gleichen $ -Wertzust . Eine häufige Frage ist: Wird dieser $ -Wergutswert von Wert in ein Array kopiert oder wird er mit Referenz übergeben?
Die Funktion array_fill () wird standardmäßig nach Wert durch Kopie gefüllt. Das heißt, wenn Sie einen Verweis auf ein Objekt oder ein Array bevölkern, handelt es sich bei jedem Element um eine separate Kopie in Array_Fill () , anstatt mehrere Elemente, die dieselbe Referenz teilen.
Schauen wir uns ein Beispiel an:
$obj = new stdClass();
$obj->name = "Alice";
$filled = array_fill(0, 3, $obj);
$filled[0]->name = "Bob";
echo $filled[1]->name; // Ausgabe "Bob"
Sie werden feststellen, dass array_fill () zwar von Wert übergeben wird, Objekte in Referenzsemantik existieren, so dass jedes Element im Array auf dasselbe Objekt zeigt. Wenn Sie die Eigenschaften eines der Objekte ändern, sind auch die anderen Elemente betroffen.
Wenn es jedoch mit einem normalen Datentyp wie einer Ganzzahl oder einer Zeichenfolge gefüllt ist, ist jedes Array -Element ein unabhängiger Wert:
$filled = array_fill(0, 3, "Hello");
$filled[0] = "World";
print_r($filled);
// Ausgabe:
// Array
// (
// [0] => World
// [1] => Hello
// [2] => Hello
// )
In diesem Beispiel wirkt sich das Ändern von $ eingereichter [0] andere Elemente nicht aus, was darauf hinweist, dass die Zeichenfolge nach Wert kopiert wird.
Wenn Sie möchten, dass jedes Array -Element dieselbe Variable verweist, nicht nur eine Kopie des Wertes, können Sie Array_Fill () unter Bezugnahme auf die Variable verwenden. Beispiele sind wie folgt:
$value = "shared";
$filled = array_fill(0, 3, &$value);
$value = "updated";
print_r($filled);
// Ausgabe:
// Array
// (
// [0] => updated
// [1] => updated
// [2] => updated
// )
In diesem Beispiel ist jedes Element im Array an den gleichen Variablen - $ -Werwert gebunden. Alle Änderungen am $ -Wertzwert werden für jedes Element im Array synchron reflektiert.
Seien Sie sich jedoch bewusst, dass diese Methode bei PHP nicht häufig ist und auch anfällig für ein unerwartetes Verhalten ist. Im Allgemeinen wird nur empfohlen, wenn mehrere Array -Elemente wirklich die gleiche Referenz teilen müssen.
Das Standardverhalten von Array_Fill () besteht darin , nach Wert zu kopieren .
Wenn $ value ein Objekt oder ein Array ist, ist der kopierte eine Referenz (da das Objekt immer in Referenz in PHP übergeben wird).
Sie können eine Referenz für die Verwendung und den $ -Werchen erzwingen, um eine echte freigegebene Referenz zu implementieren.
Verwenden Sie Referenzen mit Vorsicht, um zu vermeiden, dass schwierige Debugging -Probleme verursacht werden.
Das korrekte Verständnis des Füllmechanismus von Array_Fill () kann potenzielle logische Fehler in den tatsächlichen Projekten vermeiden. Wenn Sie funktionale Module entwickeln, die der Cache -Initialisierung, der Platzhalterstruktur und der Batch -Konfiguration ähneln, ist es besonders wichtig, diese Unterschiede zu beherrschen.
Zum Beispiel:
$placeholders = array_fill(0, 10, "http://m66.net/placeholder");
Der obige Code füllt ein Array von 10 festen URLs, die aus Werten kopiert werden und keine Referenzen teilen.
Wenn Sie diese zugrunde liegenden Mechanismen verstehen, können Sie das Verhalten des Arrays genauer steuern und die Robustheit und Wartbarkeit Ihres Codes verbessern.