Position actuelle: Accueil> Derniers articles> Oublié d'ajouter une utilisation à la référence des variables externes dans la fonction anonyme

Oublié d'ajouter une utilisation à la référence des variables externes dans la fonction anonyme

M66 2025-06-05

Pendant le développement de PHP, Array_Filter est une fonction de traitement de tableau couramment utilisée, qui permet aux développeurs de filtrer les éléments dans un tableau via des fonctions de rappel. La syntaxe de base de cette fonction est simple, mais il y a un détail facilement négligé:. Sinon, le code peut ne pas fonctionner comme prévu et peut même conduire à des erreurs logiques. Cet article analysera ce problème en profondeur et illustra avec des exemples pour lesquels l'utilisation doit être utilisée.

1. Introduction à array_filter

La fonction de Array_Filter est d'utiliser la fonction de rappel pour filtrer les valeurs dans le tableau, et uniquement les éléments que la fonction de rappel renvoie true . L'utilisation de base est la suivante:

 $input = [1, 2, 3, 4, 5];

$output = array_filter($input, function($value) {
    return $value > 3;
});

// Sortir: [4, 5]

Dans le code ci-dessus, Array_Filter filtre des valeurs supérieures à 3 à des fonctions anonymes.

2. Le problème de ne pas utiliser d'utilisation pour se référer aux variables externes

Regardons un scénario plus complexe. Nous devons filtrer les valeurs dans le tableau en fonction d'une condition dynamique. Cette condition est déterminée par le seuil de variable externe:

 $threshold = 3;

$input = [1, 2, 3, 4, 5];

$output = array_filter($input, function($value) {
    return $value > $threshold; // ? Une erreur ou un problème se produira ici
});

Lors de l'exécution de ce code, PHP invitera la variable non définie: seuil . En effet, la portée de la fonction anonyme n'accède pas directement aux variables dont la portée externe .

3. Écriture correcte: utilisez l'utilisation pour introduire explicitement les variables externes

Pour résoudre le problème ci-dessus, PHP fournit le mot-clé d'utilisation , qui vous permet d'introduire des variables des étendues externes dans la portée locale des fonctions anonymes:

 $threshold = 3;

$input = [1, 2, 3, 4, 5];

$output = array_filter($input, function($value) use ($threshold) {
    return $value > $threshold;
});

// Sortir: [4, 5]

Grâce à l'utilisation ($ threshold) , la fonction anonyme peut accéder correctement à la variable de seuil $ .

4. Comprendre profondément le principe d'utilisation de travail

Lorsque vous utilisez l'utilisation pour introduire des variables externes dans les fonctions anonymes, PHP passe en fait ces variables dans la fonction comme une valeur . C'est-à-dire que si vous modifiez le seuil $ dans une fonction anonyme, cela n'affectera pas la variable d'origine.

Jetons un coup d'œil à un exemple:

 $threshold = 3;

$filter = function($value) use ($threshold) {
    $threshold = 10;
    return $value > $threshold;
};

echo $threshold; // 仍然Sortir 3

Si vous souhaitez modifier la valeur d'une variable externe dans une fonction anonyme, vous devez le passer à l'aide d'une référence:

 $threshold = 3;

$filter = function($value) use (&$threshold) {
    $threshold = 10;
    return true;
};

$filter(5);

echo $threshold; // Sortir 10

5. Dangers cachés dans les cas réels

Imaginez que vous travaillez sur une liste d'articles et que vous souhaitez filtrer les articles pour une catégorie spécifique, et l'ID de catégorie est présent dans une variable externe. Si vous oubliez d'utiliser l'utilisation , vous pouvez obtenir un tableau vide:

 $categoryId = 2;

$articles = [
    ['id' => 1, 'category_id' => 1],
    ['id' => 2, 'category_id' => 2],
    ['id' => 3, 'category_id' => 3],
];

$filtered = array_filter($articles, function($article) {
    return $article['category_id'] == $categoryId;
});

print_r($filtered); // ? erreur,$categoryId Indéfini

Après avoir utilisé l'utilisation à la place:

 $filtered = array_filter($articles, function($article) use ($categoryId) {
    return $article['category_id'] == $categoryId;
});

// ? Filtrage correct,Le résultat est ID pour 2 Articles

6. Résumé

Lorsque vous utilisez Array_Filter et d'autres fonctions d'ordre supérieur (telles que Array_Map , Array_Reduce , etc.), si vous avez besoin d'utiliser des variables externes dans la fonction de rappel, assurez-vous d'utiliser le mot-clé Utiliser pour transmettre explicitement ces variables. Sinon, vous ne pourrez pas accéder à ces variables, ce qui peut entraîner des erreurs de code ou des exceptions logiques.

Il s'agit d'une caractéristique importante de la portée de la fermeture dans PHP, la compréhension vous permet d'écrire un code plus robuste et plus clair.

J'espère que cet article peut vous aider à éviter ce petit piège dans le développement quotidien. Si vous rencontrez des problèmes similaires lorsque vous utilisez des fermetures, vous pourriez aussi bien vérifier si l'utilisation est manquante!