آموزش ثابت‌ها در PHP و تعریف constant

از ثابت‌ها برای تعریف مقادیری استفاده می‌شود که در طول اجرای برنامه تغییر نمی‌کنند. ثابت یا constant دارای یک نام است و به کمک آن می‌توانیم برنامه‌ای بهتر و اصولی‌تر داشته باشیم. در این آموزش با مقدار ثابت در PHP آشنا شده و انواع آن را یاد می‌گیریم.

اگر بخواهم خیلی ساده و راحت ثابت‌ها را تعریف کنم، می‌گویم که ثابت همان متغیر در PHP است که مقدار آن در طول اجرای برنامه نمی‌تواند تغییر کرده یا تعریف نشده باشد.

فرض کنید در اسکریپت تحت وب خود، مقادیری دارید که به ندرت تغییر می‌کنند ولی در اکثر بخش‌های برنامه مورد استفاده قرار می‌گیرند. مقادیری مثل:

  • آدرس سایت
  • نام کاربری و رمزعبور پایگاه داده
  • حداکثر حجم مجاز آپلود فایل

اگر آموزش PHP را قدم به قدم تا به این آموزش طی کرده باشید، احتمالاً اولین چیزی که به ذهنتان می‌رسد، استفاده از متغیرهای سراسری برای هر کدام از این تنظیمات است.

ثابت در PHP چیست ؟

همان‌طور که پیش‌تر گفتم، معمولاً از ثابت‌ها برای تعریف مقدارهایی که ممکن است در طولانی مدت تغییر کنند ولی تغییر آن‌ها وابسته به هر اجرای برنامه نیست.

یکی از سه مثالی که در بالاتر لیست کردم را در نظر بگیرید؛ مثلاً آدرس سایت!

فرض کنید در حال برنامه نویسی یک سیستم مدیریت محتوا هستیم. این سیستم ممکن است روی چندین سایت اجرا شود.

اگر مقدار «آدرس سایت» را به صورت Hard Code و درون کدهای برنامه نوشته باشیم، برای هر سایت بایستی مقدار مربوط را در تمام فایل‌ها جستجو کرده و جایگزین کنیم.

در این گونه موارد بهتر است یک مقدار ثابت (مثلاً به نام SITE) ایجاد کنیم. حالا هر کجا که نیاز به آدرس سایت داریم، مقدار SITE را فراخوانی خواهیم کرد. اگر روزی نیاز به تغییر آدرس سایت یا نصب آن روی آدرسی جدید داشتیم، فقط کافی است مقدار ثابت SITE را تغییر دهیم.

تفاوت ثابت و متغیر چیست ؟

تفاوت متغیر و ثابت از نظر عملکردی تقریباً ناچیز است. برای هر دوی آن‌ها یک نام در نظر گرفته شده و با فراخوانی آن نام به مقدارش دسترسی خواهیم داشت.

اما از نظر فنی، دو تفاوت بین variable و constant وجود دارد:

  1. مقدار متغیر را می‌توانیم هر چند بار تغییر دهیم ولی پس از تعریف ثابت، مقدارش غیر قابل تغییر خواهد بود. (در طول اجرای برنامه)
  2. برای نام‌گذاری ثابت‌ها نیازی به استفاده از علامت $ در ابتدای آن‌ها نخواهیم داشت.

مورد دوم را جلوتر بررسی می‌کنیم. در مورد تفاوت اول، مطمئناً می‌دانید که پس از تعریف متغیر آزادیم مقدار آن را به دفعات تغییر دهیم. برای این کار از علامت انتساب (مساوی =) در جلوی نام متغیر استفاده می‌کنیم.

var = 37;
var = 55;

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

SITE = "newaddress";   //wrong

در تعاریف ساده، اگر متغیر را یک جعبه در نظر بگیریم که مقداری درون آن قرار داده و محتوای درون آن را می‌توان تغییر داد، ثابت‌ها جعبه‌هایی با دَرِ بسته هستند. یعنی پس از تعریف و مقداردهی اولیه، دیگر نخواهیم توانست مقدار آن را تغییر دهیم.

تفاوت متغیر و ثابت
تفاوت متغیر و ثابت به عنوان یک جعبه

دستور define در PHP

برای تعریف ثابت در PHP از دستور define به صورت زیر استفاده می‌شود:

define( name, value, ci );

تابع define سه ورودی می‌گیرد که ورودی آخر آن اختیاری است:

  • ورودی اول (name) : نام ثابت را مشخص می‌کند. همانند متغیرها، نام باید یکتا باشد.
  • ورودی دوم (value) : مقداری که در ثابت قرار می‌گیرد را مشخص می‌کند.
  • ورودی سوم (ci) : مقدار این ورودی به صورت true یا false است و حساسیت روی حروف بزرگ و کوچک (case-insensitive) نام ثابت را مشخص می‌کند.

مقدار سوم اگر false باشد، به این معناست که نام تعریف شده به حروف بزرگ و کوچک حساس است (case-sensitive) و اگر true باشد به معنای حساس نبودن است. این مقدار به طور پیش‌فرض false هست یعنی نام ثابت نسبت به حروف کوچک و بزرگ حساس است.

مقدار یک ثابت می‌تواند از نوع‌های داده‌ای رشته در PHP، عدد صحیح (integer)، عدد اعشاری (float) و بولین (boolean) باشد.

در قطعه کد زیر مقدار SITE را تعریف کرده و سپس با دستور echo در PHP آن را در خروجی نمایش می‌دهیم.

<?php
define("SITE", "SabzDanesh.com");
echo SITE;

حالا در قطعه زیر با تعریف true‌ برای مقدار سوم، حساسیت روی نام را برداشته‌ایم. اگر دقت کنید، مقدار ثابت تماماً با حروف بزرگ نوشته شده است ولی در خط 3 و 5 از دو حالت دیگر برای فراخوانی آن استفاده کرده‌ایم.

<?php
define("SITE", "SabzDanesh.com", true);
echo site;
echo '<br>';
echo SiTe;

این قطعه کد به درستی اجرا شده و نتیجه آن به صورت زیر خواهد بود:

SabzDanesh.com
SabzDanesh.com

دستور constant برای خواندن ثابت

برای فراخوانی ثابت در PHP همان‌طور که در کدهای بالا عمل کردیم، می‌توانیم به صورت مستقیم اسم ثابت را بیاوریم.

دستوری برای فراخوانی مقادیر ثابت پی اچ پی وجود دارد که در صورت علاقه می‌توانیم از آن نیز استفاده کنیم. دستور constant در PHP یک ورودی می‌گیرد که همان نام ثابت است و به عنوان خروجی خود، مقدار ثابت را بازمی‌گرداند.

<?php
define("WELCOME", "Hello, Welcome to SabzDanesh Site!");
echo WELCOME;
echo '<br>';
echo constant('WELCOME');
کد تعریف ثابت در PHP
کد تعریف ثابت در PHP با دستور define

نکات constant در PHP

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

ثابت سراسری (global) است

وقتی یک مقدار ثابت در PHP تعریف می‌کنیم، محدوده این مقدار به صورت سرتاسری تعریف می‌شود. یعنی تمام ثابت‌ها دارای scope سراسری (Global Scope) هستند.

این مسئله به این معنی است که با تعریف constant می‌توانیم از مقدار آن در هر قسمتی استفاده کنیم. همان‌طور که احتمالاً می‌دانید، برای استفاده از یک متغیر که بیرون از محدوده تابع تعریف شده است باید از کلیدواژه global استفاده کنیم. اما اگر بخواهیم درون تابعی مقدار ثابتی را فراخوانی کنیم، بدون نیاز به نوشتن global می‌توان از آن استفاده کرد.

define("SITE", "SabzDanesh");

function sayHello(){
    echo "Hello Dear " . SITE . " User!";
}

sayHello();
آموزش تابع در PHP و ترفندهای کار با Function

آموزش تابع در PHP و ترفندهای کار با Function

قواعد نام‌گذاری ثابت در PHP

در بخش قبلی به طور خلاصه به این مورد اشاره کردم که ساختار نام ثابت در PHP شبیه تعریف متغیر است با این تفاوت که علامت $ را در ابتدای خود ندارند. بنابراین برای انتخاب اسم ثابت در PHP باید قوانین زیر را در نظر بگیریم:

  • نام ثابت می‌تواند با یک حرف انگلیسی یا علامت underscore (_) آغاز شود.
  • در نام constant می‌توان از حروف انگلیسی (کوچک یا بزرگ)، اعداد و زیر خط (underscore) استفاده کرد.
  • ثابت‌ها علامت $ در ابتدای خود ندارند.

در کد زیر با استفاده از دستور define چند ثابت با نام‌های متفاوت ایجاد شده است:

define("AGE", 27);
define("_age", 19);
define("_0_age", 31);

معمولاً مقدارهای ثابت در PHP را در فایلی جداگانه قرار می‌دهند. سپس در هر فایلی که نیاز به فراخوانی آن‌ها بود، مشابه روش فراخوانی فایل در PHP با include کردن آن را درون فایل فعلی وارد می‌کنند.

ثابت‌های PHP

در زبان برنامه‌نویسی PHP یکسری ثابت‌های از پیش تعریف شده (Predefined Constants) وجود دارد. این ثابت ها در هسته PHP تعریف شده و در همه بخش‌های یک برنامه بدون نیاز به وارد کردن فایل خاصی قابل استفاده خواهند بود.

در این قسمت 9 ثابت پر استفاده و مهم را با هم بررسی می‌کنیم. برای آشنایی با همه ثابت‌های از پیش تعریف شده در PHP می‌توانید به مستندات انگلیسی آن مراجعه کنید.

ثابت PHP_VERSION

این ثابت، ورژن فعلی پی اچ پی که اسکریپت در حال استفاده از آن است را برمی‌گرداند. برای مثال کد زیر را در یک کامپایلر PHP نسخه 7.4 اجرا می‌کنم و نتیجه 7.4.1 را در خروجی نمایش می‌دهد.

echo PHP_VERSION;

ثابت PHP_OS

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

ثابت‌های TRUE و FALSE

این دو ثابت به ما مقادیر بولین معادل true و false را می‌دهد. در حقیقت استفاده از این دو ثابت می‌تواند به خوانایی و بهتر شدن برنامه کمک کند.

ثابت NULL در PHP

برای تخصیص مقدار بولین null در PHP از ثابت NULL تماماً با حروف بزرگ استفاده می‌کنیم. معمولاً متغیرهایی که مقدار مشخصی ندارند دارای مقدار null هستند.

ثابت PHP_INT_MAX و PHP_INT_MIN

این دو ثابت به ما بزرگ‌ترین و کوچک‌ترین عدد صحیحی که در این نسخه از PHP پشتیبانی می‌شود را برمی‌گرداند.

ثابت‌های PHP_FLOAT_MAX و PHP_FLOAT_MIN

این دو ثابت نیز بزرگ‌ترین و کوچک‌ترین عدد اعشاری که PHP از آن پشتیبانی می‌کند را در خود نگهداری می‌کنند.

معمولاً از چهار ثابت آخری برای مدیریت خطا در PHP استفاده می‌شود.

ثابت‌های جادویی پی اچ پی

ثابت جادویی در PHP در اصل نوعی ثابت از پیش تعریف شده است. به این دلیل به آن‌ها صفت جادویی داده شده است چون که وابسته به اینکه در کجا استفاده می‌شوند، مقادیر مختلفی به ما خواهند داد.

در حقیقت ثابت‌های جادویی PHP وابسته به مکان، فایل و شماره خطی که در حال فراخوانی ثابت است وابسته است.

در نسخه هفتم PHP تعداد 9 ثابت جادویی (Magic Constant) وجود دارد که توضیحات آن‌ها در جدول زیر آورده شده است:

نام ثابتخروجی ثابت
__LINE__شماره خطی که ثابت در آن فراخوانی شده
__FILE__مسیر کامل فایل در حال اجرا (full path)
__DIR__نام فولدری (دایرکتوری) که حاوی فایلِ در حال اجراست
__FUNCTION__نام تابع در حال اجرا
__CLASS__نام کلاسی که ثابت در آن فراخوانی شده
__TRAIT__نام trait جاری در PHP
__METHOD__نام متد جاری که ثابت در آن فراخوانی شده
__NAMESPACE__نام محدوده (namespace) که در آن قرار داریم
ClassName::classنام کامل کلاس با هویت آن

توجه کنید که به غیر از آخرین ثابت، سایر ثابت‌ها با دو علامت زیر خط (_) شروع شده و با دو تا از آن‌ها پایان می‌یابند.

آشنایی با تعاریف و ترفندهای کاربردی در کار با ثابت های PHP در همین جد کافی است. تقریباً با انواع ثابت PHP آشنا شده و مثال‌هایی دیدیم. اما اگر مایلید مثال‌های بیشتری بخوانید، به مستندات انگلیسی آن مراجعه کنید.