آموزش Method Invocation در Service Container لاراول

آموزش Method Invocation در Service Container لاراول

در این مقاله میخوایم قابلیت Method Invocation یا به صورت ساده صدا زدن متد یک کلاس رو با هم در سرویس کانتینر لاراول بررسی کنیم.

 

Method Invocation چیه؟

بعضی اوقات ما میخوایم که یک متد از یک کلاس صدا بزنیم. اکثر اوقات ما با استفاده از فانکشن call_user_func() میایم این کار میکنیم اما این فانکشن فقط میره اون متد صدا میزنه و تمام! اگر ما بخوایم به صورت اتوماتیک وابستگی های اون متدی که صدا میزنیم هم تزریق کنه باید چیکار کرد؟

اینجا یکم کار شاید عجیب بشه اما بریم یک مثال بزنیم، فرض کنید یک کلاس دارید با یک متد به نام create:

class Event
{
public function create(EventOnline $eventOnline)
{
// ...
}
}

 

خب حالا ما بخوایم از پی اچ پی خام استفاده کنیم برای صدا زدن متد این کلاس به این شکل عمل میکنیم:

call_user_func('Event::create'); 

 

اما ما نیاز داریم که یک شی از کلاس EventOnline درست کنیم برای وابستگی این متد!

خب فرض کنید یک این متد 4 تا وابستگی به این شکلی داشت یکم زیادی سخت میشد نه؟

حالا من یه راه کار دارم که اصن برای مهم نباشه که وابستگی چی باشه به صورت اتوماتیک کدت این وابستگی تزریق کنه.

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

use IlluminateSupportFacadesApp;

$stats = App::call([new Event, 'create']);

 

ما با استفاده از متد call لاراول میتونیم این کار به صورت راحت انجام بدیم.

حالا شاید دوست داشته باشید که یک Callable درست کنید به صورت مستقیم و از کلاس خاصی استفاده نکنید، این کار خیلی سادس کافیه اون Callable مستقیم بدید به متد call.

use IlluminateSupportFacadesApp;

$result = App::call(function (EventOnline $eventOnline) {
// ...
});

 

در اینجا به صورت راحت میتونید از کلاس EventOnline آستفاده کنید بدون نیاز به ساختن اون!

 

امیدوارم خوشتون اومده باشه💙

0 نظر

برای ارسال نظر ابتدا ثبت نام یا ورود کنید 😉