လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> array_filter () ၏ယုတ္တိဗေဒ encapsulted အစိတ်အပိုင်းများသို့ encapsult

array_filter () ၏ယုတ္တိဗေဒ encapsulted အစိတ်အပိုင်းများသို့ encapsult

M66 2025-06-03

PHP တွင် array_filter () သည် callback function ကို အခြေခံ. arrays များကို filter လုပ်နိုင်သောအလွန်အစွမ်းထက်သောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော်လည်းအလားတူ filtering ယုတ္တိဗေဒများကိုနေရာများစွာတွင်အသုံးပြုသောအမည်ဝှက်သည့်လုပ်ဆောင်ချက်များကိုတိုက်ရိုက်ရေးသားခြင်းသည်ကုဒ်နံပါတ်နှင့်ပြုပြင်ထိန်းသိမ်းမှုကိုတိုက်ရိုက်ရေးသားခြင်းမရှိပါ။ ဤဆောင်းပါးသည် array_filter () စစ်ထုတ်ခြင်းဆိုင်ရာယုတ္တိဗေဒကိုသင်၏ code ကိုပိုမိုကြော့ရှင်းရှင်းလင်းနိုင်သောနှင့်ထိန်းသိမ်းရန်ပြန်လည်သုံးသပ်နိုင်သောအစိတ်အပိုင်းတစ်ခုအဖြစ်ဘယ်လို adapsate လုပ်နည်းကိုမိတ်ဆက်ပေးလိမ့်မည်။

1 ။ အခြေခံအသုံးပြုမှုကိုပြန်လည်သုံးသပ်

အခြေခံအကျဆုံးအသုံးပြုမှုကိုအရင်ကြည့်ကြစို့။

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

// ပင်နံပါတ်များကို filter
$filtered = array_filter($data, function($item) {
    return $item % 2 === 0;
});

print_r($filtered);

အထက်ဖော်ပြပါကုဒ်သည်ရိုးရှင်းသော်လည်းနေရာများစွာတွင် "စီစစ်ခြင်းပင်နံပါတ်များ" ၏ယုတ္တိဗေဒကိုလိုအပ်ပါကကျွန်ုပ်တို့သည် Code ပုံတူပွားများပြ problem နာကိုရင်ဆိုင်ရလိမ့်မည်။

2 ။ စာသင်ခန်းသို့ယုတ္တိဗေဒစစ်ထုတ်ခြင်း

ကျွန်ုပ်တို့သည်အသုံးများသော filtering logic ကိုအတန်းထဲသို့စာသင်ခန်းထဲသို့ချထားနိုင်ပြီးပြန်လည်သုံးသပ်ရန်အတွက်၎င်းကိုစည်းလုံးညီညွတ်သော interface မှတဆင့်ခေါ်ဆိုနိုင်သည်။

 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 ။ လွတ်လပ်စွာ Silver Logic ကိုမူဝါဒအတန်းများအဖြစ် Encapsult

ယုတ္တိဗေဒကိုထပ်မံလျှော့ချရန်ကျွန်ုပ်တို့သည် filter များ၏အခြေအနေများကို "မဟာဗျူဟာအတန်းများ" ထဲသို့ချထားနိုင်သည်။

 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 ။ Dynamic Registress filter ကို

အကယ်. သင်သည်ပိုမိုပြောင်းလွယ်ပြင်လွယ်များကိုပြုပြင်လွယ်စေလိုပါက (ပြင်ဆင်မှုဖိုင်များအပေါ် အခြေခံ. မူဝါဒများ) ကိုရွေးချယ်လိုပါက "Factory Class" သို့မဟုတ် "0 န်ဆောင်မှုဆိုင်ရာမှတ်ပုံတင်ခြင်းယန္တရား" ကိုထည့်နိုင်သည်။ ဤတွင်ရိုးရှင်းသောဝန်ဆောင်မှုမှတ်ပုံတင်ခြင်းဥပမာတစ်ခု -

 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'; // configuration သို့မဟုတ်အသုံးပြုသူ input ကိုမှယူဆ
$strategy = FilterFactory::create($filterType);

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

print_r($result);

5 ။ အကျဉ်းချုပ်

array_filter ၏ callback function ကို callback function ကို encapsulating အားဖြင့်ကျွန်ုပ်တို့သည် Class ကိုစာသင်ခန်းထဲသို့ချုံ့ခြင်းအားဖြင့် Code struction ကိုစမ်းသပ်ရန်နှင့်ထိန်းသိမ်းရန်ပိုမိုလွယ်ကူနိုင်သည်။ ဤနည်းဗျူဟာပုံစံသည်အထူးသဖြင့်ကြီးမားသော application များ၌ရှုပ်ထွေးသောသို့မဟုတ် variable filesing logic ကိုကိုင်တွယ်ရန်အလွန်သင့်လျော်သည်။