در این مطلب میخوام در مورد تفاوت تعریف ثابت با const و define در زبان PHP توضیح بدم و با استفاده از مثالهای متنوع تفاوت اونا رو برای شما روشن کنم.
همونطور که میدونین از PHP 5.3 به بعد میتونیم به دو روش ثابتهای مورد نظرمون رو تعریف کنیم. این کار به وسیله کلمه کلیدی یا تابع انجام میشه.
1 2 |
const FOO = 'BAR'; define('FOO', 'BAR'); |
تفاوت اصلی و پایه ای که بین این دو روش وجود داره اینه که const در زمان کامپایل کدها ثابت رو تعریف میکنه ولی define اینکار رو در زمان اجرای برنامه انجام میده. این مورد باعث میشه که const معایب زیادی داشته باشه. بعضی از مشکلات و عیب ها رو در ادامه خواهیم دید.
1 2 3 4 5 6 7 |
if (...) { const FOO = 'BAR'; // invalid } // but if (...) { define('FOO', 'BAR'); // valid } |
1 2 |
const BIT_5 = 1 << 5; // valid since PHP 5.6, invalid previously define('BIT_5', 1 << 5); // always valid |
1 2 3 |
for ($i = ; $i < 32; ++$i) { define('BIT_' . $i, 1 << $i); } |
1 2 3 |
define('FOO', 'BAR', true); echo FOO; // BAR echo foo; // BAR |
خب تا اینجا معایب const رو بررسی کردیم. حالا میخوایم ببینیم چرا در موارد به غیر از شرایط بالا بهتره که همیشه از const استفاده کنیم.
1 2 3 4 5 |
namespace A\B\C; // To define the constant A\B\C\FOO: const FOO = 'BAR'; define('A\B\C\FOO', 'BAR'); |
1 2 |
const FOO = [1, 2, 3]; // valid in PHP 5.6 define('FOO', [1, 2, 3]); // invalid in PHP 5.6, valid in PHP 7.0 |
1 2 3 4 5 6 7 |
class Foo { const BAR = 2; // valid } // but class Baz { define('QUX', 2); // invalid } |
پس به طور کلی اگر یکی از شرایط خاص اولیه به وجود نیاد، بهتره که همیشه از const برای تعریف ثابتها استفاده کنید.
امیدوارم از این مطلب خوشتون اومده باشه.
تشکر فراوان
موفق باشید دوست عزیز