ثابتهای جادویی یا Magic Constants امکان دسترسی به اطلاعات مختلف برنامه را به ما میدهد. استفاده از این ثابتها، بهخصوص در مواردی که نیاز به دسترسی به اطلاعاتی مربوط به فایلها، کلاسها، توابع و namespaceها داریم بسیار کاربردی هستند. در این آموزش پس از تعریف این ثابتها، ۹ ثابت جادویی PHP را با مثال بررسی میکنیم.
ثابت یا constant بهنوعی یک متغیر است که مقدار آن در طول اجرای برنامه نمیتواند تغییر کند. مشابه متغیر در PHP، نام ثابت میتواند با حروف انگلیسی یا علامت _
شروع شود ولی ابتدای آن علامت دلار ($
) قرار نمیگیرد. همچنین، ثابتها بهصورت سراسری در تمام scopeهای PHP در دسترس هستند.
فهرست محتوای آموزش
تعریف ثابت جادویی در PHP
ثابتهای جادویی مقادیری هستند که بهطور خودکار توسط زبان PHP تولید میشوند. این ثابتها نیازی به تعریف توسط ما ندارند و در هر قسمت از برنامه بهراحتی در دسترس هستند. اگر میخواهید یک مقدار ثابت دلخواه را تعریف کنید، آموزش ثابت در PHP برایتان مفید است.
از ۹ ثابت جادویی که تا نسخهٔ فعلی PHP (یعنی 8.3.0) داریم، ۸ تای آنها با __
(دو تا underscore) شروع شده و با __
به پایان میرسند. این ثابتها بهطور خلاصه عبارتاند از:
__LINE__
: شماره خط فعلی را به ما میدهد.__FILE__
: مسیر کامل فایل به همراه نام فایل را در بر دارد.__DIR__
: مسیر فولدر فعلی (حاوی فایل کد) را میدهد.__FUNCTION__
: نام تابعی که در حال اجراست را میدهد.__CLASS__
: نام کلاس جاری را برمیگرداند.__METHOD__
: نام متد در حال اجرا را نگهداری میکند.__NAMESPACE__
: فضای نام (همان namespace) را برمیگرداند.__TRAIT__
: حاوی نام trait جاری است.ClassName::class
: نام کامل کلاس (نام کلاس + namespace) را میدهد.
توضیح ثابتهای جادویی PHP
در این بخش، هر ثابت را بهطور کامل بررسی کرده و برای هر کدام مثالی جهت درک بهتر میزنم.
ثابت LINE
ثابت جادویی __LINE__
شماره خط فعلی کد را درون فایلی که در حال اجراست برمیگرداند. این ثابت میتواند برای دیباگ (رفع اشکال و خطاها) و نیز نمایش خطاها مفید باشد. برای مثال، میتوانیم در هنگام مدیریت خطا و استثنا در PHP شماره دقیق خط را نیز نشان دهیم. بهطور کلی دو موقعیت کاربردی برای این ثابت عبارتاند از:
- نشان دادن شماره خط خطاها
- استفاده از شماره خط در لاگ (log) برای ثبت موقعیت خطا
اگر قطعه کد زیر را درون یک فایل قرار داده و اجرا کنیم، مقدار 4 توسط __LINE__
به ما برگردانده میشود؛ چون از این ثابت در خط چهارم فایل استفاده کردهایم.
<?php
echo "test __LINE__ constant from sabzdanesh";
// example comment
echo __LINE__; // 4
ثابت جادویی FILE در PHP
این ثابت مسیر کامل و نام فایل (همان path) را برمیگرداند. از این Magic Constant میتوانیم در مواقعی که نیاز است مسیر کامل فایل را بدانیم استفاده کنیم؛ برای مثال:
- نمایش مسیر فایل برای بررسیهای امنیتی
- استفاده از نام و مسیر فایل در گزارشگیریها
قطعه زیر را در مسیر /home/sabzdanesh/test
و در فایلی به نام codes.php
قرار داده و اجرا میکنیم:
<?php
echo "File path: " . __FILE__;
در این مثال ترکیبی از یک رشته و مقدار ثابت استفاده کردهام تا خروجی مناسبتری داشته باشم. همانطور که از آموزش رشته در PHP میدانید، میتوانیم دو رشته را با اپراتور .
به یکدیگر متصل کنیم.
اگر همین فایل را درون یکی از فولدرهای زمپ ریخته و در localhost اجرا کنیم (روی ویندوز) نتیجهای مشابه زیر میگیریم: (بیشتر بخوانید: نصب زمپ)
File path: C:\xampp\htdocs\sabzdanesh\test\codes.php
ثابت __DIR__
ثابت جادویی __DIR__
در PHP مسیر دایرکتوری فعلی را برمیگرداند. میتوانیم از این ثابت در یافتن path فایل فعلی و نیز اتصال فایلها بهصورت داینامیک (ایجاد مسیر فایلهای جدید) استفاده کنیم.
مشابه مثال قبل، اگر این بار بهجای __FILE__
مقدار __DIR__
را echo کنم، صرفاً مسیر فولدر حاوی فایل کد چاپ میشود.
<?php
echo "Directory path: " . __DIR__;
// Directory path: /home/sabzdanesh/test
// ویندوز: C:\xampp\htdocs\sabzdanesh\test
ثابت جادویی FUNCTION
ثابت __FUNCTION__
نام تابع جاری را در زمان اجرا به ما میدهد. معمولاً از این ثابت برای مستندسازی، دیباگ و گاهی اوقات بررسی اینکه آیا در تابع مورد نظرمان هستیم یا نه استفاده میکنیم. همچنین میتوانیم از نام تابع در نمایش پیغام خطای مرتبط استفاده کنیم. اگر با ساختار توابع و ترفندهای آشنا نیستید، پیشنهاد میکنم آموزش تابع در PHP را ببینید.
<?php
function test_func(){
echo "Hello user!" . "<br>";
echo "Function name: " . __FUNCTION__;
}
test_func()
خروجی قطعه کد بالا، چیزی شبیه به زیر میشود:
ثابت CLASS
ثابت __CLASS__
نام کلاس جاری را برمیگرداند. هنگامی که از این magic constant درون بدنه یک متد یا مقدار یک ویژگی از کلاس PHP استفاده میکنیم، نام همان کلاس را به ما میدهد. مشابه ثابتهای جادویی قبلی، از این ثابت میتوان در موارد زیر استفاده کرد:
- ثبت لاگ یا نمایش خطاها
- ردیابی کد (چاپ نام کلاس در هنگام اجرای برنامه برای اینکه متوجه شویم کدام بخش از کد یا کلاس در حال اجراست)
در قطعه کد زیر، از این مقدار درون بدنه یکی از متدهای کلاس استفاده کردهام. خروجی آن بهصورت کامنت در انتهای کدها نوشته شده است:
<?php
class MyClass {
public function show_class_name(){
echo "Class name: " . __CLASS__;
}
}
$obj = new MyClass();
$obj->show_class_name();
// Class name: MyClass
ثابت METHOD در PHP
ثابت جادویی __METHOD__
نام متد فعلی که ترکیبی از نام کلاس و نام متد است را برمیگرداند. بنابراین اگر متدی به نام test()
درون کلاس Example
داشته باشیم، چیزی شبیه به Example::test
در خروجی خواهیم داشت.
برای درک بهتر موقعیتی که میتوانیم از این ثابت جادویی در PHP استفاده کنیم، قطعه کد زیر را ببینید. خروجی آن در خط آخر بهصورت کامنت قرار گرفته است.
<?php
class MyClass {
public function show_class_name(){
echo "Method name: " . __METHOD__;
}
}
$obj = new MyClass();
$obj->show_class_name();
// Method name: MyClass::show_class_name
ثابت جادویی NAMESPACE
این ثابت فضای نام جاری را نشان میدهد و در پروژههایی که از namespace استفاده میکنند کاربرد دارد. از این ثابت جادویی معمولاً در روند مدیریت namespace پروژههای بزرگ و ایجاد سیستمهای ماژولار استفاده میشود.
اگر مشابه قطعه کد زیر، فایل کدی داشته باشم که برای آن یک namespace تعریف شده باشد، با استفاده از این ثابت، میتوانیم در هر بخشی از کدهای این فایل به این نام دسترسی داشته باشم. (برای مثال، از این مقدار میتوان در یک ساختار شرط در PHP برای انجام یک عملیات خاص استفاده کرد.)
<?php
namespace MyNamespace;
echo "Namespace is: " . __NAMESPACE__;
// Namespace is: MyNamespace
ثابت جادویی TRAIT
همانطور که احتمالاً از نامش حدس بزنید، ثابت __TRAIT__
نام trait جاری را نشان میدهد. از این مقدار میتوانیم در traitهایی که تعریف میشوند استفاده کنیم. استفاده از این ثابت در بررسی کلاسهای پیچیده بسیار مفید است.
در قطعه کد زیر، یک trait دارم که از آن درون کلاس مورد نظرم استفاده شده است. وقتی متد را صدا میزنم، نام trait برگردانده میشود:
tait MyTrait {
public function show_trait(){
echo "Trait name: " . __TRAIT__;
}
}
class MyClass {
use MyTrait;
}
$obj = new MyClass();
$obt->show_trait();
مطمئناً میدانید که میتوانیم trait را درون فایل دیگری تعریف کرده و با فراخوانی آن (با include و require یا namespaceها) از آن درون فایل کلاس استفاده کنم. در اینجا هر دو را درون یک فایل قرار دادهام. نتیجه اجرای فایل کد بالا را در کد زیر میبینید:
Trait name: MyTrait
ثابت ClassName::class
آخرین ثابت جادویی در PHP مسیر کامل کلاس، شامل namespace و نام کلاس را برمیگرداند. این ثابت معمولاً در پروژههایی که از چندین فضای نام استفاده میکنند کاربرد دارد. همچنین در سیستمهای Dependency Injection (تزریق وابستگی) نیز کاربرد دارد.
نحوه استفاده و نمونه خروجی این ثابت در باکس کد زیر مشخص شده است:
<?php
namespace Sabzdanesh;
class MyClass {
// ...
}
echo MyClass::class;
// Sabzdanesh\MyClass
توجه کنید که اگر کلاس ما درون هیچ namespaceـی قرار نداشته باشد، ثابت جادویی ClassName::class
صرفاً نام کلاس را به ما میدهد؛ یعنی چیزی شبیه به کد زیر:
<?php
class MyClass {
// ...
}
echo MyClass::class;
// MyClass
خلاصه آموزش
در این آموزش با ۹ ثابت جادویی در PHP آشنا شدیم. این ثابتها از پیش تعریفشده هستند و اطلاعاتی مثل شماره خط، نام فایل، مسیرها، نام کلاس و namespace را میدهند. نام تمام این ثابتها بهجز یکی (مورد آخری) با __
شروع شده و پایان مییابد.
استفاده از این ثابتها میتواند در روند توسعه، مستندسازی، دیباگ و اشکالزدایی کدها بسیار مفید باشند. مستندات این بحث در سایت PHP (+) مثال یا توضیحات خاصی ندارد و نیازی نیست علاوهبر این آموزش به آن مراجعه کنید. در جدول زیر، این ثابتها بهطور خلاصه مرور شدهاند:
نام ثابت | مقدار بازگشتی |
---|---|
__LINE__ | شماره خط فعلی در فایل |
__FILE__ | مسیر کامل و نام فایل |
__DIR__ | path دایرکتوری فایل فعلی |
__FUNCTION__ | نام تابع فعلی |
__CLASS__ | نام کلاس در حال اجرا |
__METHOD__ | نام متد فعلی |
__NAMESPACE__ | namespace در حال اجرا |
__TRAIT__ | نام trait مورد استفاده |
ClassName::class | نام کلاس با namespace |
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم