امروز اومدم واستون مفهوم این دو تا رو توضیح بدم واستون در زبان PHP که یکی از زبان های محبوب منه .
واسه هر کسی میخاد داخل شی گرایی قوی بشه باید با این دو تا مفهوم اشنا بشه و یکی از مزیت های OOP میتونیم اسمشو بذارید
خب بریم سر اصل مطلب
پس باید بریم باز سراغ کد ?
class Shape { public function getNameClass() { echo self::class; } } class Circle extends Shape{ } class Square extends Shape{ } $c=new Circle(); $s=new Square(); $shape=new Shape(); $shape->getNameClass(); $s->getNameClass(); $c->getNameClass();
من یک کلاس درست کردم به اسم Shape و یک متد تعریف کردم به اسم getNameClass که وظیفه اش اینه که بیاد اسم کلاس رو برگردونه کلاس Shape پدر Circle و Square هستش وقتی ما از Circle و Square شی میسازیم چون که self به کلاس اشاره دارد . اسم کلاس جایی رو میگه که داخلش self::class نوشتیم رو بهمون میده پس انتظارمون غلطه چون ما میخاستیم اسم کلاس Square و Circle بهمون بده
همون طور احتمالا حدس زده باشید باید از keyword static استفاده کنیم چرا چون که keyword static میاد چک میکنه Object که درست کردیم از کلاس میبینه کلاسی که اون Object ازش صدا زدیم کیه و به اون اشاره داره نه جایی که تعریفش کردیم .
پس میایم کد بالا رو اصلاح میکنیم ?
class Shape { public function getNameClass() { echo static::class; } } class Circle extends Shape{ } class Square extends Shape{ } $c=new Circle(); $s=new Square(); $shape=new Shape(); $shape->getNameClass(); $s->getNameClass(); $c->getNameClass();
الان خروجی که میخایم بهمون میده یعنی متد getClassName میاد و اسم اون class رو بر میگردونه که ازش Object ساختیم
اینم مفهموم رو بهش میگن :) Late Static Binding
از لحاظ کامپایلری این مفهموم میاد یک تاخیری میندازه تو روند اجرا و صبر میکنه تا اینکه ببینه کدوم Object از کدوم کلاس صدا زده شده تا اسم اون کلاس رو بهمون برگردونه .
امیدوارم از این مطلب خوشتون اومده باشه ?