آموزش Method Chaining در php

Image تحقیقات

آموزش Method Chaining در php

با سلام

امروز درباره متدهای زنجیره ای یا Method Chaining صحبت می کنیم.با استفاده از این خاصیت در php می توانیم در یک دستور ، چند تابع یا متد را صدا بزنیم . اگر شما با فریم ورک لاراول یا zend و … کار کرده باشین حتما نمونه هایی از این ساختار رو دیدین و استفاده کردین .

مثلا دستوراتی مانند زیر :

$a = new Order();
$a->CreateOrder()->sendOrderEmail()->createShipment();
Or if you want to call it in multiline script then you can make same call like below example
$a = new Order();
$a->CreateOrder()
->sendOrderEmail()
->createShipment();

در کدهای بالا ما از کلاس order یک آبجکت ساختیم سپس به صورت زنجیره وار متدهای اون رو صدا زدیم و استفاده کردیم.

How to create class in PHP for method chaining

روش پیاده سازیش خیلی سادس و در اکثر مواقع فقط نیاز هست یک آبجکت در هر متد از کلاسمون برگردانیم  . حالا یک مثال میزنیم با کلاسی تحت عنوان order :

class order
{
public $order_status;
public function createOrder()
{
	//Apply logic to create order
	$this->order_status = 'Order Created';
	return $this;
}
public function sendOrderEmail()
{
	//Apply logic for sending email to order
	$this->order_status = 'Email Sent';
	return $this;
}
public function createShipment()
{
	//Apply logic for creating shipment
	$this->order_status = 'Shipment Create';
	return $this;
}
}
  •  ابتدا در خط 1 کلاس order را تعریف کردیم
  • در حطوط 4 و 10 و 16 متدهایی را در این کلاس تعریف کردیم که هر کدام با استفاده از this$ یه نمونه از کلاس جاری را بر میگردانند پس در نتیجه اگر به فرض متد createOrder را صدا بزنیم به دلیل اینکه کلاس جاری را بر میگرداند باز می توانیم از این کلاس یک متد دیگر را صدا بزنیم (حالت زنجیری)

کلاس  بالا را می توانیم به اصن صورت استفاده نماییم :

$a = new Order();
$a->CreateOrder()->sendOrderEmail()->createShipment();

می توانیم  method chaining را با بیش از یک کلاس پیاده سازی کنیم . یعنی متدهای چند کلاس را به صورت زنجیره ای صدا کنیم.

Class xyz
{
	function xyz_function()
	{
		return 1;
	}
}
Class test
{
	function test_function()
	{
		//Add your business log
		$a = new xyz();
		return $a;
	}
}
	$a = new test();
	echo $a->test_function()->xyz_function();// will print 1.
  •  در خط 17 از کلاس test یک ابجکت ساختیم
  • در خط 18 متد test_function از کلاس  test را صدا زدیم و چون این متد یک ابچکت از کلاس xyz بر میگرداند پس در ادامه ی زنجیرمون میتوانیم متد xyz_function راهم صدا بزنیم.

استفاده از کلاس های بالا به صورت زیر :

$a = new test();
echo $a->test_function()->xyz_function();// will print 1.

پس یادمون باشه اگر در متدمون کلاس جاری را برگردانیم در ادامه ی زنجیر می توانیم متد دیگر کلاس جاری را صدا کنیم ولی اگر کلاس دیگری را برگردانیم می توانیم در زنجیرمون متد همان کلاس را صدا کنیم.

خب این جلسه هم به پایان رسید

موفق و پیروز باشید.