از جمله معادلهایی که میتوان برای واژهٔ Constant در نظر گرفت «ثابت» است و در توسعهٔ نرمافزار هم دیتایی که در حافظهٔ سیستم ذخیره شده و در عین حال قابلتغییر نباشد، Constant نامیده میشود. به طور کلی، از جمله کاربردهای کانستنتها میتوان به ذخیرهٔ نامکاربری و رمزعبور دیتابیس و یا برخی تنظیمات پیکربندی سیستم اشاره کرد.
به منظور آشنایی با نحوهٔ تعریف و استفاده از کانستنتها در شیئگرایی، داخل پوشهٔ oop پروژهای تحت عنوان constant ساخته و با مد نظر قرار دادن ساختار پروژهای که در این دوره مورد استفاده قرار دادهایم، وارد پوشهٔ classes شده و فایلی به نام User.php ساخته و محتویات زیر را داخل آن مینویسیم:
<?php
namespace SokanAcademy;
class User
{
const BASE_USER_GROUP_ID = 3;
public function getBaseUserGroupId()
{
return self::BASE_USER_GROUP_ID;
}
}
داخل بدنهٔ این کلاس، به منظور تعریف کردن یک کانستنت از کیورد const استفاده کرده و نامی دلخواه برای آن در نظر گرفتهایم و در نهایت هم مقدار پیشفرض ۳ را بر آن انتخاب نمودهایم.
در ادامه، متدی تعریف کردهایم به نام ()getBaseUserGroupId که این وظیفه را دارا است تا مقدار کانستنت موجود را ریترن کند. همانطور که ملاحظه میشود، به منظور دستیابی به کانستنتی که داخل بدنهٔ کلاسی که در آن قرار داریم تعریف شده است، میباید دستور self را نوشته سپس علائم :: را درج نموده و در نهایت نام کانستنت مد نظر خود را نوشت. حال به منظور تست این کلاس، وارد فایل index.php شده و آن را به صورت زیر تکمیل میکنیم:
<?php
ini_set('display_errors', '1');
require_once 'vendor/autoload.php';
$user = new SokanAcademy\User();
echo $user::BASE_USER_GROUP_ID;
echo "\n";
echo $user->getBaseUserGroupId();
پس از ساخت یک آبجکت از روی کلاس User، در خط هفتم با استفاده از دستور echo خودِ کانستنت BASE_USER_GROUP_ID را فراخوانی کردهایم بدین شکل که پس از نام آبجکت user$ از علائم :: استفاده نموده سپس نام کانستنت مد نظر خود را نوشتهایم. همچنین در خط نهم متد ()getBaseUserGroupId را فراخوانی کردهایم که این متد نیز وظیفهٔ ریترن کردن مقدار کانستنت مذکور را دارا است. چنانچه این فایل را در محیط کامندلاین اجرا کنیم، در خروجی خواهیم داشت:
3
3
حال داخل پوشهٔ classes فایلی به نام Author.php ساخته و آن را به صورت زیر تکمیل میکنیم:
<?php
namespace SokanAcademy;
class Author extends User
{
public function showConstantFromParentClass()
{
return parent::BASE_USER_GROUP_ID;
}
}
با توجه به این که کلاس Author فرزند کلاس User محسوب میشود، از همین روی به کلیهٔ ویژگیهای کلاس والد من جمله کانستنت BASE_USER_GROUP_ID دسترسی داریم. داخل این کلاس متدی تعریف کردهایم تحت عنوان ()showConstantFromParentClass که این وظیفه را دارا است تا مقدار کانستنت مذکور را ریترن کند؛ برای همین منظور، پس از نوشتن دستور return اقدام به درج کیورد parent کرده سپس علائم :: را قرار داده و در نهایت نام کانستنت مذکور را نوشتهایم. در عین حال، به جای نوشتن کیورد parent از نام کلاس User هم به صورت زیر میتوانیم استفاده کنیم:
<?php
namespace SokanAcademy;
class Author extends User
{
public function showConstantFromParentClass()
{
return User::BASE_USER_GROUP_ID;
}
}
اما این در حالی است که استفاده از کیورد parent به مراتب بهتر است چرا که اگر در آینده به هر دلیلی نام کلاس User دستخوش تغییر گردد، دیگر نیازی به آپدیت کردن کدهای داخل این متد نخواهیم داشت. حال مجدد وارد فایل index.php شده و آن را به صورت زیر آپدیت میکنیم:
<?php
ini_set('display_errors', '1');
require_once 'vendor/autoload.php';
$user = new SokanAcademy\User();
$author = new SokanAcademy\Author();
echo $user::BASE_USER_GROUP_ID;
echo "\n";
echo $user->getBaseUserGroupId();
echo "\n";
echo $author->showConstantFromParentClass();
آبجکت جدیدی از روی کلاس Author ساخته سپس در خط دوازدهم تنها متد موجود داخل این کلاس تحت عنوان ()showConstantFromParentClass را فراخوانی کردهایم و در صورتی که فایل فوق را مجدد اجرا کنیم، میبینیم که سه بار مقدار کانستنت BASE_USER_GROUP_ID در خروجی چاپ خواهد شد.
