Aktueller Standort: Startseite> Neueste Artikel> Umfassen Sie die Logik von Array_Filter () in multiplexierte Komponenten ein

Umfassen Sie die Logik von Array_Filter () in multiplexierte Komponenten ein

M66 2025-06-03

In PHP ist Array_filter () eine sehr leistungsstarke Funktion, die Arrays basierend auf der Rückruffunktion filtern kann. In großen Projekten oder Szenarien, in denen eine ähnliche Filterlogik an mehreren Stellen verwendet wird, ist das Schreiben direkter anonymer Funktionen an jedem Rufpunkt nicht förderlich wie die Wiederverwendung und Wartung von Code. In diesem Artikel wird eingeführt, wie die Filterlogik von Array_Filter () in eine wiederverwendbare Komponente eingebaut werden kann, um Ihren Code eleganter und wartbarer zu gestalten.

1. Überprüfung der Grundnutzung

Schauen wir uns zunächst die grundlegendste Verwendung an:

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

// Filtern Sie auch Zahlen heraus
$filtered = array_filter($data, function($item) {
    return $item % 2 === 0;
});

print_r($filtered);

Obwohl der obige Code einfach ist, werden wir, wenn wir an mehreren Stellen die Logik der "Filterung von geraden Zahlen" benötigen, vor dem Problem der Code -Duplikation konfrontiert.

2. Die Logik der Kapselungsfilterung in die Klasse

Wir können häufig verwendete Filterlogik in eine Klasse einkapseln und sie über eine einheitliche Schnittstelle aufrufen, um eine Wiederverwendbarkeit zu erreichen.

 class ArrayFilter
{
    protected array $data;

    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function filter(callable $callback): array
    {
        return array_filter($this->data, $callback);
    }
}

Wie man verwendet:

 $data = [1, 2, 3, 4, 5];
$filter = new ArrayFilter($data);

$result = $filter->filter(function ($item) {
    return $item % 2 === 0;
});

print_r($result);

3.. Unabhängig voneinander die Filterlogik in Richtlinienklassen einbeziehen

Um die Logik weiter zu entkoppeln, können wir die Filterbedingungen in "Strategieklassen" einschließen:

 interface FilterStrategyInterface
{
    public function apply($item): bool;
}

class EvenNumberFilter implements FilterStrategyInterface
{
    public function apply($item): bool
    {
        return $item % 2 === 0;
    }
}

Ändern Sie dann die ArrayFilter -Klasse, um diese Richtlinie zu erhalten:

 class StrategyArrayFilter
{
    protected array $data;

    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function filter(FilterStrategyInterface $strategy): array
    {
        return array_filter($this->data, [$strategy, 'apply']);
    }
}

Wie man verwendet:

 $data = [1, 2, 3, 4, 5];
$filter = new StrategyArrayFilter($data);

$result = $filter->filter(new EvenNumberFilter());

print_r($result);

Auf diese Weise kann jede Filterlogik separat als Klasse definiert werden, wodurch eine gute Code -Organisationsstruktur für einfache Prüfung und Wiederverwendung implementiert wird.

4. Dynamischer Registrierungsfilter

Wenn Sie Filter flexibler konfigurieren möchten (z. B. Richtlinien basierend auf Konfigurationsdateien), können Sie eine "Werksklasse" oder "Service -Registrierungsmechanismus" hinzufügen. Hier ist ein einfaches Beispiel für die Registrierung von Service:

 class FilterFactory
{
    public static function create(string $type): FilterStrategyInterface
    {
        return match ($type) {
            'even' => new EvenNumberFilter(),
            default => throw new InvalidArgumentException("Unknown filter type: $type")
        };
    }
}

Die Verwendung ist wie folgt:

 $filterType = 'even'; // Nehmen Sie aus der Konfiguration oder der Benutzereingabe an
$strategy = FilterFactory::create($filterType);

$filter = new StrategyArrayFilter([1, 2, 3, 4, 5]);
$result = $filter->filter($strategy);

print_r($result);

5. Zusammenfassung

Durch Einkapseln der Rückruffunktion von Array_filter () in eine Klasse können wir eine klarere, die Codestruktur leichter zu testen und aufrechtzuerhalten. Dieses Strategiemuster ist sehr geeignet für die Behandlung komplexer oder variabler Filterlogik, insbesondere in großen Anwendungen.