လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP Object-Oriented Programming တွင်တာဝန်ကွင်းဆက်ပုံစံကိုအသေးစိတ်ရှင်းပြချက်နှင့်အကောင်အထည်ဖော်ခြင်း

PHP Object-Oriented Programming တွင်တာဝန်ကွင်းဆက်ပုံစံကိုအသေးစိတ်ရှင်းပြချက်နှင့်အကောင်အထည်ဖော်ခြင်း

M66 2025-06-18

PHP Object-Oriented Programming တွင်တာဝန်ကွင်းဆက်ပုံစံကိုအသေးစိတ်ရှင်းပြချက်နှင့်အကောင်အထည်ဖော်ခြင်း

တာဝန်ဝတ္တရားပုံစံသည်အမူအကျင့်ဒီဇိုင်းပုံစံတစ်ခုဖြစ်ပြီးပရိုဆက်ဆာသည်တောင်းဆိုမှုကိုလုပ်ငန်းစဉ်ကိုလုပ်ဆောင်နိုင်သည့်အထိအပြောင်းအလဲနဲ့ကွင်းဆက်တစ်လျှောက်ဖြတ်သန်းသွားခွင့်ပြုသည်။ ဤနည်းအားဖြင့်ကွဲပြားခြားနားသောပရိုဆက်ဆာများကို decoupled နိုင်ပြီးအပြောင်းအလဲနဲ့ကွင်းဆက်ကိုပြောင်းလဲခြင်းသို့မဟုတ်ပရိုဆက်ဆာအသစ်များကိုထည့်သွင်းနိုင်သည်။

PHP တွင် Object-Oriented Programming ကိုအသုံးပြုခြင်းသည်တာဝန်ကွင်းဆက်ပုံစံကိုပိုမိုအကောင်အထည်ဖော်နိုင်သည်။ အောက်ပါတို့သည်ဤပုံစံ၏အကောင်အထည်ဖော်မှုနည်းလမ်းကိုရိုးရှင်းသောဥပမာကုဒ်မှတဆင့်ပြသလိမ့်မည်။

1 ။ စိတ်တဇပရိုဆက်ဆာအတန်းတစ်ခုဖန်တီးပါ

ပထမ ဦး စွာကွန်ကရစ်ကိုင်တွယ်သူအားလုံးအတွက်အခြေခံအကျဆုံးအတန်းအစားအတန်းအဖြစ်သတ်မှတ်ရန်လိုအပ်သည်။ လာမည့် handler setting အတွက် `setnext ()` methodnext () `methodnext (` setnext () `ကိုကိုင်တွယ်ဘို့နည်းလမ်း` လက်ကိုင် () `` လက်ကိုင် () ပါဝင်သည်။

 abstract class Handler {
    protected $nextHandler;

    public function setNext(Handler $handler) {
        $this->nextHandler = $handler;
    }

    abstract public function handle(Request $request);
}

2 ။ သတ်သတ်မှတ်မှတ် handler အတန်းကိုအကောင်အထည်ဖော်ပါ

နောက်တစ်ခုက Seconler's Class မှအမွေဆက်ခံပြီး `လက်ကိုင် ()` method ကိုအကောင်အထည်ဖော်ရန်တိကျသော handler အတန်းကိုဖန်တီးသည်။ ပြုပြင်ခြင်းယုတ္တိဗေဒတွင်လက်ရှိပရိုဆက်ဆာသည်တောင်းဆိုမှုကိုမလုပ်ဆောင်နိုင်ပါကနောက်လာမည့်ပရိုဆက်ဆာသို့တောင်းဆိုမှုကိုဖြတ်သန်းသည်။

 class ConcreteHandler1 extends Handler {
    public function handle(Request $request) {
        if ($request->getType() == 'type1') {
            echo "Handled by ConcreteHandler1";
        } else {
            if ($this->nextHandler) {
                $this->nextHandler->handle($request);
            } else {
                echo "No handler can handle the request";
            }
        }
    }
}

3 ။ အခြားတိကျသောပရိုဆက်ဆာအတန်းကိုဖန်တီးပါ

ကျွန်ုပ်တို့သည်အခြားတိကျသောပရိုဆက်ဆာအတန်းအစား `concretehandler2 ကိုဖန်တီးသည်။ နှင့် `concretehandler1`` ၏နောက် handler ကိုထား:

 class ConcreteHandler2 extends Handler {
    public function handle(Request $request) {
        if ($request->getType() == 'type2') {
            echo "Handled by ConcreteHandler2";
        } else {
            if ($this->nextHandler) {
                $this->nextHandler->handle($request);
            } else {
                echo "No handler can handle the request";
            }
        }
    }
}

4 ။ တောင်းဆိုမှုအတန်းတစ်ခုဖန်တီးပါ

တောင်းဆိုချက်အချက်အလက်များကိုပရိုဆက်ဆာသို့ကူးပြောင်းနိုင်ရန်အတွက်တောင်းဆိုထားသောဒေတာများကို encapsate လုပ်ရန် `` `` `class ကိုကျွန်ုပ်တို့လိုအပ်သည်။ ၎င်းတွင်အပြောင်းအလဲနဲ့ကွင်းဆက်တွင်ပေးပို့ရန်တောင်းဆိုခြင်း၏အချက်အလက်အမျိုးအစားပါရှိသည်။

 class Request {
    protected $type;

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

    public function getType() {
        return $this->type;
    }
}

5 ။ တာဝန်မော်ဒယ်၏ကွင်းဆက်စမ်းသပ်ပါ

နောက်ဆုံးအနေဖြင့်ကျွန်ုပ်တို့သည်တာ 0 န် 0 တ္တရားကွင်းဆက်ပုံစံကိုအကောင်အထည်ဖော်နိုင်သည်။ ပထမ ဦး စွာတောင်းဆိုမှုအရာဝတ်ထုတစ်ခုကိုဖန်တီးပါ, ထို့နောက်ပရိုဆက်ဆာအရာဝတ်ထုနှစ်ခုကိုဖန်တီးပြီး၎င်းတို့အကြားအပြောင်းအလဲနဲ့ကွင်းဆက်ကိုတည်ဆောက်ပါ။ ထို့နောက်တောင်းဆိုမှုကိုပထမ handler သို့ဖြတ်ပြီးအပြောင်းအလဲနဲ့လုပ်ငန်းစဉ်ကိုစစ်ဆေးပါ။

 $request = new Request('type2');
$handler1 = new ConcreteHandler1();
$handler2 = new ConcreteHandler2();

$handler1->setNext($handler2);
$handler1->handle($request);

အထက်ပါကုဒ်ကိုဖွင့်ပါ။

concretehandler2 အားဖြင့်ကိုင်တွယ်

Test Code မှတွေ့နိုင်သည်မှာတောင်းဆိုမှုအမျိုးအစားသည် Type2 အမျိုးအစားဖြစ်သည်ဟု Concretehandler2` သည်တောင်းဆိုမှုကိုကိုင်တွယ်နိုင်သည်, တောင်းဆိုမှုအမျိုးအစားသည် type1 ကို 'type1' ဖြစ်သည့်အခါ concretehandler1` သည်တောင်းဆိုမှုကိုမကိုင်တွယ်နိုင်ပါ, ထို့ကြောင့်တောင်းဆိုမှုကို `concretehandler2` 'ကိုလွှဲပြောင်းပေးပြီးနောက် handler မရှိရင်" မကိုင်တွယ်နိုင်ပါ။

အကျဉ်းချုပ်

တာဝန်ယူမှုပုံစံသည် Object-Oriented ပရိုဂရမ်မှတစ်ဆင့်ပြောင်းလွယ်ပြင်လွယ်ရှိသောတောင်းဆိုမှုအပြောင်းအလဲအတွက်နည်းလမ်းဖြစ်သည်။ တောင်းဆိုမှုကိုလုပ်ဆောင်သောအခါပရိုဆက်ဆာတစ်ခုစီသည်သူကိုင်တွယ်နိုင်သည့်တောင်းဆိုမှုအမျိုးအစားကိုသာဂရုစိုက်သည်။ ၎င်းကိုမလုပ်ဆောင်နိုင်ပါကတောင်းဆိုမှုကိုနောက်ပရိုဆက်ဆာသို့လွှဲပြောင်းပေးလိမ့်မည်။ ဤနည်းလမ်းသည်ပရိုဆက်ဆာတစ်ခုစီကိုထိထိရောက်ရောက်ဖြည့်ဆည်းပေးသည်။