လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP'S_A () function မှတဆင့်အမျိုးအစားအခြေပြုနားထောင်သူဖြန့်ဖြူးမှုကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း။

PHP'S_A () function မှတဆင့်အမျိုးအစားအခြေပြုနားထောင်သူဖြန့်ဖြူးမှုကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း။

M66 2025-06-23

Event-driven ဗိသုကာပညာသည်ခေတ်သစ် PHP applications များတည်ဆောက်သည့်အခါဘုံ decoupting နည်းလမ်းဖြစ်သည်။ စနစ်အတွင်းရှိအချို့သောစစ်ဆင်ရေးများအတွက်ဖြစ်ရပ်များကိုသင်သတ်မှတ်နိုင်ပြီးနောက်နားထောင်သူကဤဖြစ်ရပ်များကိုတုံ့ပြန်သည်။ ဖြစ်ရပ်အမျိုးအစားများကိုမျိုးစုံကိုဝေမျှသည့်အခြေအနေမျိုးတွင်နားထောင်သူများသည်ဖြစ်ရပ်တစ်ခုကိုကိုင်တွယ်သင့်မသင့်ကိုသင်မည်သို့မျှအကြောင်းရှုမြင်သင့်သည်။ ဤသည် is_a () function ကို၎င်း၏ကျွမ်းကျင်မှုပြသနိုင်အတိအကျဖြစ်ပါတယ်။

ဤဆောင်းပါးသည် is_a () function ကို အသုံးပြု. ပွဲအခြေပြုဖြန့်ဖြူးရေးယန္တရားကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း။

ဖြစ်ရပ်များနှင့်နားထောင်သူများ၏အခြေခံဒီဇိုင်း

ပထမ ဦး စွာကျွန်ုပ်တို့သည်အခြေခံဖြစ်ရပ် interface နှင့်သီးခြားဖြစ်ရပ်များကိုသတ်မှတ်သည်။

 interface EventInterface {}

class UserRegisteredEvent implements EventInterface {
    public string $username;
    public function __construct(string $username) {
        $this->username = $username;
    }
}

class OrderPlacedEvent implements EventInterface {
    public int $orderId;
    public function __construct(int $orderId) {
        $this->orderId = $orderId;
    }
}

ထို့နောက်ကျွန်ုပ်တို့သည်နားထောင်သူမျက်နှာပြင်နှင့်သတ်သတ်မှတ်မှတ်နားထောင်သူကိုသတ်မှတ်သည်။

 interface EventListenerInterface {
    public function handle(EventInterface $event): void;
    public function isInterestedIn(EventInterface $event): bool;
}

class SendWelcomeEmailListener implements EventListenerInterface {
    public function handle(EventInterface $event): void {
        if (!$event instanceof UserRegisteredEvent) return;

        // ဤနေရာတွင်အီးမေးလ်များပို့ခြင်း၏ယုတ္တိဗေဒဖြစ်သည်ဆိုပါစို့
        echo "အသုံးပြုသူအားကြိုဆိုသောအီးမေးလ်ပို့ပါ:{$event->username}\n";
    }

    public function isInterestedIn(EventInterface $event): bool {
        return is_a($event, UserRegisteredEvent::class);
    }
}

isinterested () နည်းလမ်းသည်အမျိုးအစားစီရင်ချက်များကိုပြုလုပ်ရန်ကျွန်ုပ်တို့အသုံးပြုသောနေရာဖြစ်သည်။ ၎င်းသည် 0 င်ရောက်လာသည့်အဖြစ်အပျက်သည်နားထောင်သူအတွက်အကျိုးစီးပွားအမျိုးအစားဟုတ်မဟုတ်ဆုံးဖြတ်ရန် IS_A () ကိုအသုံးပြုသည်။

ဖြစ်ရပ်ဖြန့်ဖြူးအကောင်အထည်ဖော်

ထို့နောက်ကျွန်ုပ်တို့သည်ရိုးရှင်းသောအဖြစ်အပျက်ဖြန့်ချိသူတစ် ဦး အားအောက်ပါအတိုင်းလိုက်နာပြီး,

 class EventDispatcher {
    /**
     * @var EventListenerInterface[]
     */
    private array $listeners = [];

    public function addListener(EventListenerInterface $listener): void {
        $this->listeners[] = $listener;
    }

    public function dispatch(EventInterface $event): void {
        foreach ($this->listeners as $listener) {
            if ($listener->isInterestedIn($event)) {
                $listener->handle($event);
            }
        }
    }
}

အခုဒီဖြန့်ဖြူးသူကိုဒီလိုမျိုးသုံးနိုင်တယ်။

 $dispatcher = new EventDispatcher();

$dispatcher->addListener(new SendWelcomeEmailListener());

$userEvent = new UserRegisteredEvent('Alice');
$orderEvent = new OrderPlacedEvent(1001);

$dispatcher->dispatch($userEvent);
// ထုတ်လုပ်ခြင်း:အသုံးပြုသူအားကြိုဆိုသောအီးမေးလ်ပို့ပါ:Alice

$dispatcher->dispatch($orderEvent);
// 没有ထုတ်လုပ်ခြင်း,ဘာဖြစ်လို့လဲဆိုတော့နားထောင်သူက OrderPlacedEvent စိတ်မဝင်စားဘူး

IS_A ၏အားသာချက်များ ()

IS_A () function ကိုအသုံးပြုခြင်းသည်အောက်ပါအားသာချက်များရှိသည်။

  • ရှင်းလင်းသော semantics - သင်အမျိုးအစားကိုစစ်ကြောစီရင်နေကြောင်းတိုက်ရိုက်ဖော်ပြသည်။

  • ပံ့ပိုးမှုအမွေ - အရာဝတ်ထုတစ်ခုသည်အတန်းအစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်နိုင်သည်။

  • ပိုမိုမြင့်မားသောပြောင်းလွယ်ပြင်လွယ် - ၎င်းသည်အမျိုးမျိုးသောဖြစ်ရပ်များကိုနားထောင်ရန်နားထောင်သူများအားအလွယ်တကူထောက်ပံ့နိုင်သည်

ပိုမိုရှုပ်ထွေးသော application အခြေအနေများ

အစစ်အမှန်စီမံကိန်းများတွင်, နားထောင်သူအားသင် configuration မှသင်စိတ်ဝင်စားသောဖြစ်ရပ်အမျိုးအစားကိုကြေငြာလိုပေမည်။ ဤအချိန်တွင်သင်သည်ဖြစ်ရပ် class name ကိုနားထောင်သူတစ် ဦး အဖြစ်သိမ်းဆည်းထားပြီး၎င်းကို is_a နှင့်နှိုင်းယှဉ်နိုင်သည်။

 class DynamicListener implements EventListenerInterface {
    private string $interestedClass;

    public function __construct(string $interestedClass) {
        $this->interestedClass = $interestedClass;
    }

    public function handle(EventInterface $event): void {
        echo "ဖြစ်ရပ်များကိုကိုင်တွယ်:" . get_class($event) . "\n";
    }

    public function isInterestedIn(EventInterface $event): bool {
        return is_a($event, $this->interestedClass);
    }
}

ယခုသင်သည်နားထောင်သူများအားပုံမှန်အားဖြင့်မှတ်ပုံတင်နိုင်သည်။

 $dispatcher->addListener(new DynamicListener(UserRegisteredEvent::class));
$dispatcher->addListener(new DynamicListener(OrderPlacedEvent::class));

အကျဉ်းချုပ်

is_a () function ကိုမှတစ်ဆင့်ကျွန်ုပ်တို့သည်နားထောင်သူ၏ typeal just ၏တရားစီရင်ခြင်းဆိုင်ရာယုတ္တိဗေဒကိုလျောက်ပတ်စွာအကောင်အထည်ဖော်နိုင်သည်။ ၎င်းသည်အဖြစ်အပျက် -ricy စနစ်များအတွက်ရှင်းလင်းပြတ်သားစွာပြောင်းလွယ်ပြင်လွယ်သောဖြစ်ရပ်မှန်စစ်ထုတ်ခြင်းယန္တရားကိုအထူးသဖြင့် Multi-add type spriks ည့်သည်များအတွက်သင့်တော်သည်။ ရှုပ်ထွေးသောစနစ်များတည်ဆောက်သည့်အခါဤပုံစံသည်စီးပွားရေးယုတ္တိဗေဒဆိုင်ရာယုတ္တိဗေဒကိုထိထိရောက်ရောက်ထိန်းချုပ်နိုင်ပြီးစနစ်၏ထိန်းသိမ်းနိုင်မှုနှင့်ပမာဏကိုတိုးတက်စေနိုင်သည်။

နောက်ထပ်လက်တွေ့ကျသောဥပမာများနှင့်ဖြစ်ရပ်မောင်းနှင်မှုဗိသုကာများအပေါ်ပွင့ လင်းသောအရင်းအမြစ်စီမံကိန်းများအတွက်,