متد استاتیک
متدهای استاتیک متدهایی هستن که روی خود کلاس تعریف میشن نه اشیاء کلاس. گاهی اوقات توی برنامهنویسی شئگرا نیاز به متدهایی پیدا میکنید که باید ازطریق خود کلاس فراخوانی بشن و وابسته به شئ خاصی از اون کلاس نیستن. برای مثال ممکنه هدف از ایجاد یک کلاس، صرفاً جمعآوری یکسری متد مرتبط با هم ازنظر معنایی، داخل یک ظرف مشترک باشه. مثلاً کلاسی بهاسم Math تعریف کنید و متدهای add و sub و multiply و div و reminder و power و... رو داخلش تعریف کنید. در اینجا برای استفاده از این متدها، واقعاً ایجاد یک شئ از کلاس بیفایده است چون شئ زمانی معنا داره که یک موجودیت با هویت مستقل داشته باشیم که پارامترها (فیلدها) و رفتارها (متدها) مخصوص به خودش رو داشته باشه اما این متدهایی که گفتیم، مشترک هستن و پارامترهای خودشون رو از ورودی دریافت میکنن و نتیجه رو return میکنن.
در این حالت ایجاد یک شئ از کلاس و استفاده از این متدها روی اون شئ (مشابه متدهای معمولی یا غیر استاتیک)، فقط داره حافظهی بیهوده مصرف میکنه چون تمام کاری که شما میخواین با اون شئ انجام بدین، صدازدن همین متدها و ارسال پارامترهای ورودی و گرفتن جواب خروجی از اون متده که برای اینکار استفاده از متدهای استاتیک مناسبتره.
برای فراخوانی متدهای استاتیک داخل بدنهی کلاس میتونیم از ساختار زیر استفاده کنیم:
self::methodName($param1, $param2, ...)
که البته اگه متد مربوطه بصورت public تعریف شده باشه، خارج از کلاس هم میتونیم بصورت زیر صداش بزنیم:
ClassName::methodName($param1, $param2, ...)
از اونجا که این متدها ازطریق اسم کلاس فراخوانی میشن (نه اسم شئ ایجادشده از کلاس)، بنابراین موقع فراخوانی اونها درعمل شیئی وجود نداره و به همین دلیل، توی متدهای استاتیک نمیتونیم فیلدهای غیراستاتیک یا متدهای غیراستاتیک رو فراخوانی کنیم. درواقع توی متدهای استاتیک به
$this دسترسی نداریم چون
$this به شئ جاری از کلاس اشاره میکنه درحالی که توی این متدها اصلاً شیئی وجود نداره که بخوایم بهش دسترسی پیدا کنیم.