از جمله معادلهایی که میتوان برای واژهٔ 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
در خروجی چاپ خواهد شد.