در برنامهنویسی شییٔگرا (OOP)، اصطلاح Constructor به متدی اشاره دارد که به محض ساخت یک آبجکت از روی کلاسی، به صورت خودکار فراخوانی میشود. در حقیقت یکی از وظایف اصلی کانستراکتور این است که آبجکت ساختهشده را برای استفاده آماده سازد.
در واقع، در برنامهنویسی شییٔگرا هر زمانی که بخواهیم به محض ساخت یک آبجکت (شییٔ) از روی یک کلاس، تَسکی اول از همه و آن هم به صورت خودکار انجام شود، میبایست از مفهومی تحت عنوان کانستراکتور استفاده نماییم (همچنین یکی دیگر از کاربردهای کانستراکتور، مقداردهی کردن پراپرتیها است.)
مثال از کانستراکتور در زبان PHP
برای درک بهتر مفهوم کانستراکتور، در ادامه مثالی از این نوع خاص از فانکشنها در زبان PHP میآوریم. به طور مثال، فایلی میسازیم تحت عنوان Database.php
و کدهای زیر را داخل آن مینویسیم:
<?php
class Database
{
public $userName;
public $password;
public $dbName;
function __construct($UserName, $Password, $DbName)
{
$this->userName = $UserName;
$this->password = $Password;
$this->dbName = $DbName;
}
}
همانطور که میبینیم، کلاسی داریم همنام با فایل ساخته شده تحت عنوان Database
که داخل آن سه پراپرتی از جنس public
تعریف کردهایم.
حال میرسیم به اصل موضوع که ساخت کانستراکتور است. برای این منظور، کلیدواژهٔ function
که الزامی است را نوشته، سپس دو علامت Underscore یا به عبارتی _ پشت سر هم قرار میدهیم و در نهایت کلیدواژهٔ construct
را مینویسیم.
کانستراکتوری که در این مثال آوردهایم، پارامتر ورودی میگیرد (البته توجه داشته باشیم که میتوان بدون در نظر گرفتن پارامترهای ورودی هم اقدام به تعریف کانستراکتور کرد.) که در ادامه داخل کانستراکتور مقدار پراپرتیهای تعریف شده داخل کلاس Database
را برابر با این پارامترها قرار دادهایم. حال برای تست کردن عملکرد این کانستراکتور، در ادامه اقدام به ساخت یک آبجکت از روی این کلاس مینماییم:
$db = new Database ('admin', 'zyqq76%g23$$', 'new_project');
همانطور که مشاهده میشود، از روی کلاس Database
آبجکتی ساختهایم تحت عنوان db$
و از آنجا که کانستراکتور این کلاس سه پارامتر ورودی اجباری میگرفت، لذا باید در حین ساخت یک آبجکت جدید سه پارامتر ورودی را اصطلاحاً پاس دهیم که از غیر این صورت، با ارور مواجه خواهیم شد.
حال به محض اجرای اسکریپت فوق، یک آبجکت از روی کلاس Database
ساخته میشود و همانطور که قبلاً اشاره کردیم که به محض ساخت یک آبجکت جدید از روی کلاس کانستراکتورش هم به صورت خودکار اجرا میشود، کانستراکتور و بالتبع کدهای داخل آن اجرا میشوند که در نتیجه، مقادیر در نظر گرفته شده در حین ساخت آبجکت به پراپرتیها اختصاص مییابد. برای اطمینان حاصل کردن از صحت این ادعا، میتوانیم به صورت زیر یکی از پراپرتیها را چاپ کنیم:
echo $db->password; // zyqq76%g23$$
میبینیم که مقدار zyqq76%g23$$ به درستی به پراپرتی password$
انتقال پیدا کرده است. در واقع، از این پس آبجکتی از روی کلاس Database
داریم که دارای دیتای مد نظر ما است که در برنامهٔ خود بسته به نیازمان، میتوانیم آن را مورد استفاده قرار دهیم.