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 () function ကိုအသုံးပြုခြင်းသည်အောက်ပါအားသာချက်များရှိသည်။
ရှင်းလင်းသော semantics - သင်အမျိုးအစားကိုစစ်ကြောစီရင်နေကြောင်းတိုက်ရိုက်ဖော်ပြသည်။
ပံ့ပိုးမှုအမွေ - အရာဝတ်ထုတစ်ခုသည်အတန်းအစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်နိုင်သည်။
ပိုမိုမြင့်မားသောပြောင်းလွယ်ပြင်လွယ် - ၎င်းသည်အမျိုးမျိုးသောဖြစ်ရပ်များကိုနားထောင်ရန်နားထောင်သူများအားအလွယ်တကူထောက်ပံ့နိုင်သည် ။
အစစ်အမှန်စီမံကိန်းများတွင်, နားထောင်သူအားသင် 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 ည့်သည်များအတွက်သင့်တော်သည်။ ရှုပ်ထွေးသောစနစ်များတည်ဆောက်သည့်အခါဤပုံစံသည်စီးပွားရေးယုတ္တိဗေဒဆိုင်ရာယုတ္တိဗေဒကိုထိထိရောက်ရောက်ထိန်းချုပ်နိုင်ပြီးစနစ်၏ထိန်းသိမ်းနိုင်မှုနှင့်ပမာဏကိုတိုးတက်စေနိုင်သည်။
နောက်ထပ်လက်တွေ့ကျသောဥပမာများနှင့်ဖြစ်ရပ်မောင်းနှင်မှုဗိသုကာများအပေါ်ပွင့ ် လင်းသောအရင်းအမြစ်စီမံကိန်းများအတွက်,