Chaining methods در پی اچ پی
اگر شما مطلب در مورد ساخت یه کلاس فایل رو دنبال کرده باشید ما با قابلیت جالبی بر خوردیم که میتونستیم از متدی به متد دیگه به صورت زنجیره وار متصل بشیم مثلا :
( new File() )->find("nameFile")->get()
خوب در اینجا ما ابتدا فایل های با نام nameFile رو پیدا میکردیم و بعد با متد get میومدیم فایل ها رو به نمایش قرار میدادیم ولی این کار چطور کار میکنه و چه فعل و انفعالاتی صورت میگیره ؟!
معمولا chaining زمانی استفاده میشود که قصد ذخیره سازی property جدید رو داخل داریم . برای مثال ما در کلاس بالا وقتی متد find رو صدا زدیم داخل این متد اول تمام فایل ها رو پیدا میکند و به صورت ارایه در پروپرتی به نام فایل files ذخیره میکنه و در پایان متد از
return $this ;
استفاده میکنه وقتی ما در پایان متد از this استفاده میکنیم متد ما داره شی جاری رو برگشت میزنه به خاطر همین ما میتونیم زنجیر وار به متد ها متصل بشیم .
کد پایین هم دقیقا شبیه کد اول عمل میکنه :
$files = new File() ;
$files->find("name") ;
$files->get() ;
به خط دوم دقت کنید چه زمانی داریم از متد استفاده میکنیم ؟ زمانی که ما یه شی از files ساختیم و از شی داریم استفاده میکنیم
در خط دوم به متد به ما شی رو بر میگردونه
در خط سوم ما داریم از شی استفاده شده دوباره استفاده میکنیم و به متد get وصل میشیم
همون طور میبیند شی (this) که بر میگردونیم کلید زنجیر وار استفاده از متد ها است .
ولی در متد static چگونه استفاده میشود ؟؟
همونطور که در جریان هستید ما نمیتونم در متد های static از this$ استفاده کنیم . و متد های static بدون ساختن شی میتونیم بهشون دسترسی داشته باشیم . در متد های استاتیک از self استفاده میشه به کلاس جاری اشاره میکنه خوب بیاین یه سری به یه مثال قدیمی بزنیم ساخت کلاس دیتابیس رو در این پست تحلیل میکنیم :
DB::table("users")->get()
همونطور که میبیند متد table از نوع static تعریف شده در انتهای این متد از :
return new self() ;
استفاده شده و از کلاس جاری ما یه شی میسازه و برگشت میزنه و دقیقا شبیه this بقیه کار ها روش اعمال میشه بخش کلیدیش این بود self ما میتونیم حتی از __class__ یا new static استفاده کنیم چون ما قصدمون اینه که از کلاس فعلی یعنی DB شی بسازیم به خاطر همین میتونیم هر روشی که دلمون خواست انجامش بدیم