Aktueller Standort: Startseite> Neueste Artikel> Ich habe vergessen, die Verwendung hinzuzufügen, um externe Variablen in der anonymen Funktion zu verweisen

Ich habe vergessen, die Verwendung hinzuzufügen, um externe Variablen in der anonymen Funktion zu verweisen

M66 2025-06-05

Während der PHP -Entwicklung ist Array_filter eine häufig verwendete Array -Verarbeitungsfunktion, mit der Entwickler Elemente in einem Array durch Rückruffunktionen filtern können. Die grundlegende Syntax dieser Funktion ist einfach, aber es gibt ein Detail, das leicht zu übersehen ist: Andernfalls funktioniert der Code möglicherweise nicht wie erwartet und kann sogar zu logischen Fehlern führen. In diesem Artikel wird dieses Problem eingehend analysiert und mit Beispielen veranschaulicht, warum die Verwendung verwendet werden muss.

1. Einführung in Array_filter

Die Funktion von Array_filter besteht darin, die Rückruffunktion zu verwenden, um die Werte im Array zu filtern, und nur die Elemente, die die Rückruffunktion true zurückgibt. Die grundlegende Verwendung ist wie folgt:

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

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

// Ausgabe: [4, 5]

Im obigen Code filtert Array_filter die Werte, die über 3 durch anonyme Funktionen größer als 3 sind.

2. Das Problem, sich nicht auf externe Variablen zu beziehen

Schauen wir uns ein komplexeres Szenario an. Wir müssen die Werte im Array basierend auf einem dynamischen Zustand filtern. Diese Bedingung wird durch die externe Variable $ Threshold bestimmt:

 $threshold = 3;

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

$output = array_filter($input, function($value) {
    return $value > $threshold; // ? Ein Fehler oder ein Problem tritt hier auf
});

Beim Ausführen dieses Codes fordert PHP eine undefinierte Variable: Schwellenwert auf. Dies liegt daran, dass der Bereich der anonymen Funktion nicht direkt auf Variablen zugreift, deren externer Bereich .

3. Richtiges Schreiben: Verwenden Sie die Verwendung, um externe Variablen explizit einzuführen

Um das obige Problem zu lösen, bietet PHP das Schlüsselwort verwenden , mit dem Sie Variablen aus externen Teilen in den lokalen Bereich der anonymen Funktionen einführen können:

 $threshold = 3;

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

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

// Ausgabe: [4, 5]

Durch die Verwendung ($ Threshold) kann die anonyme Funktion korrekt auf die Variable $ zugreifen.

4. Verstehen Sie das Arbeitsprinzip des Gebrauchs zutiefst

Wenn Sie die Verwendung verwenden, um externe Variablen in anonymen Funktionen einzuführen, übergibt PHP diese Variablen tatsächlich als Wert in die Funktion. Das heißt, wenn Sie $ Threshold in einer anonymen Funktion ändern, wirkt sich dies nicht auf die ursprüngliche Variable aus.

Schauen wir uns ein Beispiel an:

 $threshold = 3;

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

echo $threshold; // 仍然Ausgabe 3

Wenn Sie den Wert einer externen Variablen in einer anonymen Funktion ändern möchten, müssen Sie ihn mit einer Referenz übergeben:

 $threshold = 3;

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

$filter(5);

echo $threshold; // Ausgabe 10

5. Versteckte Gefahren in realen Fällen

Stellen Sie sich vor, Sie arbeiten an einer Liste von Artikeln und möchten Artikel für eine bestimmte Kategorie herausfiltern, und die Kategorie -ID ist in einer externen Variablen vorhanden. Wenn Sie vergessen, die Verwendung zu verwenden, erhalten Sie möglicherweise ein leeres Array:

 $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); // ? Fehler,$categoryId Undefiniert

Nachdem Sie stattdessen verwendet werden :

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

// ? Richtige Filterung,Das Ergebnis ist ID für 2 Artikel

6. Zusammenfassung

Wenn Sie in der Rückruffunktion externe Variablen verwenden müssen, um diese Variablen explizit zu übergeben , verwenden Sie das Nutzungsschlüsselwort , um externe Variablen explizit zu übergeben. Andernfalls können Sie nicht auf diese Variablen zugreifen, was zu Codefehlern oder logischen Ausnahmen führen kann.

Dies ist ein wichtiges Merkmal des Verschlussesumfangs in PHP und ermöglicht es Ihnen, robustere und klarere Code zu schreiben.

Ich hoffe, dieser Artikel kann Ihnen helfen, diese kleine Falle in der täglichen Entwicklung zu vermeiden. Wenn Sie bei der Verwendung von Schließungen auf ähnliche Probleme stoßen, können Sie auch prüfen, ob die Verwendung fehlt!