Position actuelle: Accueil> Derniers articles> array_fill () La valeur remplie est-elle référencée ou copiée?

array_fill () La valeur remplie est-elle référencée ou copiée?

M66 2025-06-05

Dans la programmation PHP, Array_Fill () est une fonction très pratique pour créer et remplir un tableau. Sa signature de fonction est la suivante:

 array array_fill(int $start_index, int $count, mixed $value)

La fonction consiste à démarrer à la position d'index de démarrage spécifiée, à créer un tableau contenant des éléments de comptage et à le remplir avec la même valeur $ . Une question courante est: cette valeur $ est-elle copiée dans un tableau par valeur, ou est-elle adoptée par référence?

Le comportement des valeurs de remplissage: copier par valeur

La fonction array_fill () est remplie par copie par valeur par défaut. Autrement dit, si vous remplissez une référence à un objet ou à un tableau, chaque élément sera une copie distincte dans array_fill () , plutôt que plusieurs éléments partageant la même référence.

Jetons un coup d'œil à un exemple:

 $obj = new stdClass();
$obj->name = "Alice";

$filled = array_fill(0, 3, $obj);
$filled[0]->name = "Bob";

echo $filled[1]->name; // Sortir "Bob"

Vous constaterez que bien que Array_Fill () soit passé par valeur, les objets existent en sémantique de référence, donc chaque élément du tableau pointe vers le même objet. Lorsque vous modifiez les propriétés de l'un des objets, les autres éléments sont également affectés.

Mais s'il est rempli d'un type de données normal, comme un entier ou une chaîne, chaque élément de tableau est une valeur indépendante:

 $filled = array_fill(0, 3, "Hello");
$filled[0] = "World";

print_r($filled);
// Sortir:
// Array
// (
//     [0] => World
//     [1] => Hello
//     [2] => Hello
// )

Dans cet exemple, la modification de $ déposée [0] n'affectera pas d'autres éléments, indiquant que la chaîne est copiée par valeur.

Comment remplir par référence?

Si vous souhaitez que chaque élément de tableau fait référence à la même variable, pas seulement une copie de la valeur, vous pouvez utiliser array_fill () en référence à la variable. Les exemples sont les suivants:

 $value = "shared";
$filled = array_fill(0, 3, &$value);

$value = "updated";
print_r($filled);
// Sortir:
// Array
// (
//     [0] => updated
//     [1] => updated
//     [2] => updated
// )

Dans cet exemple, l'utilisation et la valeur $ explicitement en tant que référence, chaque élément du tableau est lié à la même valeur $ variable. Toute modification de la valeur $ est reflétée de manière synchrone à chaque élément du tableau.

Mais sachez que cette méthode n'est pas courante en PHP et est également susceptible de provoquer un comportement inattendu. Généralement, il n'est recommandé que si plusieurs éléments de tableau doivent vraiment partager la même référence.

Résumer

  • Le comportement par défaut de Array_Fill () est de copier par valeur .

  • Si $ la valeur est un objet ou un tableau, celui copié est en fait une référence (car l'objet est toujours passé en référence en PHP).

  • Vous pouvez forcer une référence à l'utilisation et à la valeur $ pour implémenter une véritable référence partagée.

  • Utilisez des références avec prudence pour éviter de causer des problèmes de débogage difficiles.

La compréhension correcte du mécanisme de remplissage de Array_Fill () aide à éviter les erreurs logiques potentielles dans les projets réels. Si vous développez des modules fonctionnels similaires à l'initialisation du cache, à la structure d'espace réservé et à la configuration des lots, il est particulièrement important de maîtriser ces différences.

Par exemple:

 $placeholders = array_fill(0, 10, "http://m66.net/placeholder");

Le code ci-dessus remplira un tableau de 10 URL fixes qui sont copiés à partir des valeurs et ne partageront pas des références.

En comprenant ces mécanismes sous-jacents, vous pouvez contrôler plus précisément le comportement du tableau et améliorer la robustesse et la maintenabilité de votre code.