مفهوم PHP Late Static Binding در زبان برنامه‌نویسی PHP



visibility  
mode_comment   ۰

در این مقاله از سون‌لرن قصد داریم تا شما را با ویژگی PHP Late Static Binding (پی‌اچ‌پی لِیت استاتیک بایندینگ) آشنا کنیم که از نسخه‌ی 5.3 به PHP اضافه شده است.

مفهوم PHP Late Static Binding

اجازه دهید تا آموزش خود را با یک مثال ساده شروع کنیم. لطفاً به کد زیر نگاه کنید:

اگر بخواهیم توضیحی درباره‌ی این کد PHP و مشکلی که در نبود PHP Late Static Binding وجود دارد، داشته باشیم:

  • ما یک کلاس با نام Model ایجاد کردیم که شامل پراپرتی استاتیک tableName$ با مقدار Model و متود استاتیک ()getTableName می‌شود. این متود، مقدار tableName$ را باز می‌گرداند. توجه داشته باشید که ما برای اینکه به پراپرتی استاتیک داخل کلاس Model در متود ()getTableName دسترسی داشته باشیم از self و اپراتور :: استفاده کردیم.
  • ما کلاس دیگری با نام User که فرزند کلاس Model است ساختیم. این کلاس نیز دارای پراپرتی استاتیک tableName$ اما با مقدار User می‌باشد.
  • در نهایت، ما متود ()getTableName را از کلاس User صدا می‌زنیم اما برخلاف انتظار، در خروجی به جای کلاس User کلاس Model صدا زده می‌شود. دلیل چنین اتفاقی این است که هنگامی که از کلیدواژه‌ی self استفاده می‌شود همیشه کلاسی صدا زده می‌شود که متود به آن کلاس تعلق دارد. به عبارت دیگر، اگر شما یک متود در کلاس والد تعریف کنید و آن را از کلاس فرزند صدا بزنید، بر خلاف انتظاری که دارید، آن متود به جای صدا زده شدن از کلاس فرزند، از کلاس والد صدا زده می‌شود.

برای حل این مشکل، از نسخه‌ی 5.3 در PHP یک ویژگی جدید با نام PHP Late Static Binding معرفی شده است که به جای استفاده از کلیدواژه‌ی self، شما می‌توانید از کلیدواژه‌ی static استفاده کنید تا به همان کلاس واقعی در زمان صدا زدن اشاره شود. اکنون اجازه دهید تا کد خود را ویرایش کنیم و نتیجه‌ی مورد انتظار خود را با استفاده از مفهوم PHP Late Static Binding در خروجی ببینیم:

توجه داشته باشید که ::static تنها به متودها و پراپرتی‌های استاتیک اشاره می‌کند.

comment دیدگاه کاربران

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.