تفاوت تعریف ثابت با const و define در php

- visibility ۲ mode_comment

تفاوت تعریف ثابت با const و define در php

در این مطلب میخوام در مورد تفاوت تعریف ثابت با const و define در زبان PHP توضیح بدم و با استفاده از مثالهای متنوع تفاوت اونا رو برای شما روشن کنم.

همونطور که میدونین از PHP 5.3 به بعد میتونیم به دو روش ثابتهای مورد نظرمون رو تعریف کنیم. این کار به وسیله کلمه کلیدی const یا تابع define() انجام میشه.

تفاوت اصلی و پایه ای که بین این دو روش وجود داره اینه که const در زمان کامپایل کدها ثابت رو تعریف میکنه ولی define اینکار رو در زمان اجرای برنامه انجام میده. این مورد باعث میشه که const معایب زیادی داشته باشه. بعضی از مشکلات و عیب ها رو در ادامه خواهیم دید.

  • نمیتونین از const بصورت شرطی ثابتها رو تعریف کنید. برای تعریف یک ثابت Global باید اون رو در بالاترین Scope قرار بدین و اون رو در بلاک خاصی قرار ندین.
  • const چیزای استاتیک مثل عدد، رشته، true و false و null و __FILE__ رو قبول میکنه در حالی که در define میتونین هر عبارتی رو قرار بدین. از PHP 5.6 به بعد این محدودیت از const نیز برداشته شده و میتونین موارد مورد نظرتون رو در const هم قرار بدین.
  • const یک نام ثابت ساده رو قبول میکنه در حالی که برای define میتونین هر عبارتی که دوست داشته باشید قرار بدین و اون رو بصورت داینامیک مشخص کنید. مثلا میتونین یک حلقه for قرار بدین و در هر بار تکرار یک ثابت رو با define تعریف کنید:
  • const همیشه حساس به حالت هست در حالی که اگر به عنوان ورودی سوم به define مقدار true رو پاس بدین، دیگه حساس به حالت نیست و هم بصورت بزرگ و هم بصورت کوچک میتونین به اون دسترسی داشته باشید:

خب تا اینجا معایب const رو بررسی کردیم. حالا میخوایم ببینیم چرا در موارد به غیر از شرایط بالا بهتره که همیشه از const استفاده کنیم.

  • خوانایی const در کدها بهتر هست. تعریف کردن ثابت به اون نیاز به صدا زدن تابعی نداره و شبیه به تعریف کردن ثابت در کلاس ها هست.
  • const ثابت رو در فضای نام یا namespace فعلی تعریف میکنه. در صورتی که اگر بخواید با define همچنین کاری رو انجام بدین باید کل فضای نام رو قبل از نام ثابت مورد نظرتون قرار بدین. کد زیر رو ببینید:
  • از PHP 5.6 به بعد میتونید یک آرایه رو به عنوان مقدار ثابت در نظر بگیرید در حالی که اینکار با استفاده از define قابل انجام نیست. البته در PHP 7 به بعد این قابلیت به define هم اضافه شده و با هر کدام میتونین اینکار رو انجام بدین.
  • سرعت const از define مقداری بیشتر هست.
  • میتونین از const برای تعریف ثابت در class ها هم استفاده کنید. بصورت زیر:

پس به طور کلی اگر یکی از شرایط خاص اولیه به وجود نیاد، بهتره که همیشه از const برای تعریف ثابتها استفاده کنید.

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

Source

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

تشکر فراوان

محمد اسفندیاری

موفق باشید دوست عزیز

نیاز به لاگین

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