현재 위치: > 최신 기사 목록> array_filter ()의 논리를 다중화 된 구성 요소로 캡슐화하십시오

array_filter ()의 논리를 다중화 된 구성 요소로 캡슐화하십시오

M66 2025-06-03

PHP에서 Array_Filter () 는 우리가 전달한 콜백 함수를 기반으로 배열을 필터링 할 수있는 매우 강력한 기능입니다. 그러나 여러 장소에서 유사한 필터링 로직이 사용되는 대규모 프로젝트 또는 시나리오에서는 각 콜 포인트에서 익명 기능을 직접 작성하는 것이 재사용 및 유지 보수를 코딩하는 데 도움이되지 않습니다. 이 기사에서는 Code 의 필터링 로직을 재사용 가능한 구성 요소로 캡슐화하여 코드를보다 우아하고 유지 관리 할 수 ​​있도록하는 방법을 소개합니다.

1. 기본 사용법 검토

먼저 가장 기본적인 사용법을 살펴 보겠습니다.

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

// 짝수를 걸러냅니다
$filtered = array_filter($data, function($item) {
    return $item % 2 === 0;
});

print_r($filtered);

위의 코드는 간단하지만 여러 장소에서 "짝수 숫자"의 논리가 필요한 경우 코드 복제 문제에 직면하게됩니다.

2. 캡슐화 필터링 로직으로 클래스로

일반적으로 사용되는 필터링 로직을 클래스로 캡슐화하고 통합 인터페이스를 통해 호출하여 재사용 가능성을 달성 할 수 있습니다.

 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);
    }
}

사용 방법 :

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

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

print_r($result);

3. 독립적으로 필터 로직을 정책 클래스로 캡슐화합니다

논리를 추가로 해체하기 위해 필터 조건을 "전략 클래스"로 캡슐화 할 수 있습니다.

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

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

그런 다음이 정책을 수신하려면 ArrayFilter 클래스를 수정하십시오.

 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']);
    }
}

사용 방법 :

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

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

print_r($result);

이러한 방식으로, 각 필터링 로직은 클래스로 별도로 정의 될 수 있으며, 쉬운 테스트 및 재사용을위한 우수한 코드 구성 구조를 구현할 수 있습니다.

4. 동적 등록 필터

필터를보다 유연하게 구성하려면 (예 : 구성 파일을 기반으로 정책 선택) "공장 클래스"또는 "서비스 등록 메커니즘"을 추가 할 수 있습니다. 간단한 서비스 등록 예는 다음과 같습니다.

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

사용법은 다음과 같습니다.

 $filterType = 'even'; // 구성 또는 사용자 입력에서 가정합니다
$strategy = FilterFactory::create($filterType);

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

print_r($result);

5. 요약

Array_Filter () 의 콜백 함수를 클래스로 캡슐화함으로써 더 명확하고 쉽게 테스트하고 테스트하고 유지 관리 할 수 ​​있습니다. 이 전략 패턴은 특히 대규모 응용 프로그램에서 복잡하거나 가변 필터링 로직을 처리하는 데 매우 적합합니다.