
از ثابتها برای تعریف مقادیری استفاده میشود که در طول اجرای برنامه تغییر نمیکنند. ثابت یا constant دارای یک نام است و به کمک آن میتوانیم برنامهای بهتر و اصولیتر داشته باشیم. در این آموزش با مقدار ثابت در PHP آشنا شده و انواع آن را یاد میگیریم.
اگر بخواهم خیلی ساده و راحت ثابتها را تعریف کنم، میگویم که ثابت همان متغیر در PHP است که مقدار آن در طول اجرای برنامه نمیتواند تغییر کرده یا تعریف نشده باشد.
فرض کنید در اسکریپت تحت وب خود، مقادیری دارید که به ندرت تغییر میکنند ولی در اکثر بخشهای برنامه مورد استفاده قرار میگیرند. مقادیری مثل:
- آدرس سایت
- نام کاربری و رمزعبور پایگاه داده
- حداکثر حجم مجاز آپلود فایل
اگر آموزش PHP را قدم به قدم تا به این آموزش طی کرده باشید، احتمالاً اولین چیزی که به ذهنتان میرسد، استفاده از متغیرهای سراسری برای هر کدام از این تنظیمات است.
فهرست محتوای آموزش
ثابت در PHP چیست ؟
همانطور که پیشتر گفتم، معمولاً از ثابتها برای تعریف مقدارهایی که ممکن است در طولانی مدت تغییر کنند ولی تغییر آنها وابسته به هر اجرای برنامه نیست.
یکی از سه مثالی که در بالاتر لیست کردم را در نظر بگیرید؛ مثلاً آدرس سایت!
فرض کنید در حال برنامه نویسی یک سیستم مدیریت محتوا هستیم. این سیستم ممکن است روی چندین سایت اجرا شود.
اگر مقدار «آدرس سایت» را به صورت Hard Code و درون کدهای برنامه نوشته باشیم، برای هر سایت بایستی مقدار مربوط را در تمام فایلها جستجو کرده و جایگزین کنیم.
در این گونه موارد بهتر است یک مقدار ثابت (مثلاً به نام SITE) ایجاد کنیم. حالا هر کجا که نیاز به آدرس سایت داریم، مقدار SITE را فراخوانی خواهیم کرد. اگر روزی نیاز به تغییر آدرس سایت یا نصب آن روی آدرسی جدید داشتیم، فقط کافی است مقدار ثابت SITE را تغییر دهیم.
تفاوت ثابت و متغیر چیست ؟
تفاوت متغیر و ثابت از نظر عملکردی تقریباً ناچیز است. برای هر دوی آنها یک نام در نظر گرفته شده و با فراخوانی آن نام به مقدارش دسترسی خواهیم داشت.
اما از نظر فنی، دو تفاوت بین variable و constant وجود دارد:
- مقدار متغیر را میتوانیم هر چند بار تغییر دهیم ولی پس از تعریف ثابت، مقدارش غیر قابل تغییر خواهد بود. (در طول اجرای برنامه)
- برای نامگذاری ثابتها نیازی به استفاده از علامت
$
در ابتدای آنها نخواهیم داشت.
مورد دوم را جلوتر بررسی میکنیم. در مورد تفاوت اول، مطمئناً میدانید که پس از تعریف متغیر آزادیم مقدار آن را به دفعات تغییر دهیم. برای این کار از علامت انتساب (مساوی =
) در جلوی نام متغیر استفاده میکنیم.
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');

نکات constant در PHP
لازم است دو نکته در تعریف ثابتها در PHP را همیشه به خاطر داشته باشیم. در این بخش این دو مورد را با هم بررسی میکنیم.
ثابت سراسری (global) است
وقتی یک مقدار ثابت در PHP تعریف میکنیم، محدوده این مقدار به صورت سرتاسری تعریف میشود. یعنی تمام ثابتها دارای scope سراسری (Global Scope) هستند.
این مسئله به این معنی است که با تعریف constant میتوانیم از مقدار آن در هر قسمتی استفاده کنیم. همانطور که احتمالاً میدانید، برای استفاده از یک متغیر که بیرون از محدوده تابع تعریف شده است باید از کلیدواژه global استفاده کنیم. اما اگر بخواهیم درون تابعی مقدار ثابتی را فراخوانی کنیم، بدون نیاز به نوشتن global میتوان از آن استفاده کرد.
define("SITE", "SabzDanesh");
function sayHello(){
echo "Hello Dear " . SITE . " User!";
}
sayHello();
قواعد نامگذاری ثابت در 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 | نام کامل کلاس با هویت آن |
توجه کنید که به غیر از آخرین ثابت، سایر ثابتها با دو علامت زیر خط (_
) شروع شده و با دو تا از آنها پایان مییابند. اگر میخواهید با ثابتهای Magic بهطور کامل آشنا شده و کدهای مثال و نمونه خروجی آنها را ببینید، به آموزش ۹ ثابت جادویی PHP مراجعه کنید.
آشنایی با تعاریف و ترفندهای کاربردی در کار با ثابت های PHP در همین جد کافی است. تقریباً با انواع ثابت PHP آشنا شده و مثالهایی دیدیم. اما اگر مایلید مثالهای بیشتری بخوانید، به مستندات انگلیسی آن مراجعه کنید.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
با سلام و وقت بخیر مرسی از مقاله خوبتون چند وقتی هست که با پیام deprecate برای ثابت های تعریف شده با define رو به رو میشم داکیومنت سایت php رو که میخونم اونم تاکید کرده از ورژن ۸ دیگه کلا این define رو پاک میکنه. الان ما با constant همون کارها رو میتونیم بکنیم یا نه؟ جایگزینی وجود داره براش؟ با تشکر
سلام
من توی مستنداتش موردی برای منسوخ شدن تابع define ندیدم! اتفاقاً توی ورژن 8 هم اعلام کرده که هست. البته آرگومان سوم تابع رو منسوخ کرده (اینکه حساس به حروف کوچیک و بزرگ باشه یا نه) که من توی این آموزش هنوز آپدیتش نکردم.
یعنی شما اسم و مقدارش رو بزنید احتمالاً خطایی نگیرید. یه چک کنید، اگه موردی بود، لینک مستنداتی که میگید رو هم بفرستید دقیقتر چک کنم.
سلام عرض ادب ، بله بنده اشتباه متوجه شدم، باید آرگومان سوم رو false بدیم تا دیگه ایراد نگیره.
ممنونم از پیگیری و جوابتون
اصلاً false هم نذارید اوکیه چون پیشفرضش همینه.
توی خوندن مستندات معمولاً از این اشتباهات جزئی پیش میاد 🙂
عالی بود مرسی
لطفا مباحث پیشرفته ترم توی سایتتون بذارید
سلام
ممنون برای پیشنهادتون. تقریباً از ماه آینده انتشار ترفندهای پیشرفته برنامه نویسی رو در سایت آغاز میکنیم.