ویرگول
ورودثبت نام
Ali Razavi
Ali Razavi
خواندن ۲ دقیقه·۴ سال پیش

کیوردهای self و static و مفهوم Late Static Binding در PHP


امروز اومدم واستون مفهوم این دو تا رو توضیح بدم واستون در زبان PHP که یکی از زبان های محبوب منه .

واسه هر کسی میخاد داخل شی گرایی قوی بشه باید با این دو تا مفهوم اشنا بشه و یکی از مزیت های OOP میتونیم اسمشو بذارید

خب بریم سر اصل مطلب

Late Static Binding چیست

پس باید بریم باز سراغ کد ?


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 از کدوم کلاس صدا زده شده تا اسم اون کلاس رو بهمون برگردونه .

امیدوارم از این مطلب خوشتون اومده باشه ?

phpشی گراییoopstaticclass
برنامه نویس دون پایه
شاید از این پست‌ها خوشتان بیاید