دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / سازنده (PHP Constructor)

سازنده (PHP Constructor)

30 دقیقه Article

سازنده (__construct): آغازِ حیات 👶⚡

سازنده یا Constructor تابعی جادویی است که به محضِ ساخته شدنِ یک شیء (با کلمه‌یِ new)، به طورِ خودکار اجرا می‌شود. این بهترین مکان برایِ مقداردهیِ اولیه است.

تعریفِ سازنده

در PHP، تمامِ توابعِ جادویی با دو زیرخط (Double Underscore) شروع می‌شوند: __construct.

{code_block('class User {\n public $name;\n function __construct($n) {\n $this->name = $n;\n }\n}')}

مزیتِ استفاده از سازنده:

  • کاهشِ خطِ کد در هنگامِ ساختِ شیء.
  • اطمینان از اینکه شیء بدونِ داده‌هایِ ضروری ساخته نمی‌شود.
  • امکانِ اجرایِ منطق‌هایِ پیچیده در لحظه‌یِ تولدِ شیء.
Constructor Promotion (PHP 8): در نسخه‌های جدید، می‌توانید ویژگی‌ها را مستقیماً در آرگومان‌هایِ سازنده تعریف کنید تا کدتان بسیار کوتاه‌تر شود: {code_block('function __construct(public string $name) {} // تمام!')}
مقادیرِ پیش‌فرض: می‌توانید برای پارامترهایِ سازنده مقدارِ پیش‌فرض بگذارید تا اگر کاربر داده‌ای نداد، شیء باز هم به درستی ساخته شود.

فراخوانیِ سازنده:

{code_block('$user = new User("ParsCode"); // مقداردهی در همین خط')}
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: معماریِ پیشرفته و مهندسیِ اشیاء 🐘💎

برنامه‌نویسیِ شیءگرا در PHP پس از نسخه‌یِ ۷ و ۸ تغییراتِ بنیادینی داشته و به ابزاری بسیار قدرتمند برایِ ساختِ سیستم‌هایِ پیچیده تبدیل شده است.

۱. ساختارِ حافظه و Object Handles

در PHP، متغیرهایی که حاویِ یک شیء هستند، خودِ شیء را ذخیره نمی‌کنند؛ بلکه یک Identifier یا دستگیره (Handle) را نگه می‌دارند که به جدولِ اشیاءِ درونیِ موتورِ Zend Engine اشاره می‌کند. به همین دلیل است که وقتی یک شیء را به تابعی پاس می‌دهید، تغییرات در همان شیءِ اصلی اعمال می‌شود (شبه‌ارجاع).

۲. رعایتِ اصولِ SOLID

در طراحیِ کلاس‌ها، همیشه به اصلِ Single Responsibility پایبند باشید. یک کلاس باید فقط یک دلیل برایِ تغییر داشته باشد. استفاده از Interfaces به شما اجازه می‌دهد وابستگی‌هایِ کدتان را به حداقل برسانید (Dependency Inversion).

۳. کدهایِ JIT-Friendly

موتورِ JIT در PHP 8 کدها را به زبانِ ماشین تبدیل می‌کند. نوشتنِ کدهایِ شیءگرا با ساختارِ مشخص و استفاده از Property Typing به JIT کمک می‌کند تا کدهایِ شما را بسیار بهینه‌تر اجرا کند.

نکته مهندسی: همیشه از Strict Types استفاده کنید. این کار باعث می‌شود خطاهایِ منطقی در زمانِ توسعه پیدا شوند و از رفتارهایِ پیش‌بینی‌نشده در هنگامِ کار با متدها جلوگیری شود.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تعریفِ سازنده Medium
سوال تمرین

یک سازنده برای کلاسِ Car بنویسید که مقدارِ $model را بگیرد و در ویژگیِ کلاس ست کند.

پاسخ تمرین
PHP
<?php
class Car {
  public $model;
  function __construct($model) {
    $this->model = $model;
  }
}
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.