دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / کلاس‌ها و اشیاء (PHP Classes/Objects)

کلاس‌ها و اشیاء (PHP Classes/Objects)

30 دقیقه Article

کلاس‌ها و اشیاء: از نقشه تا واقعیت 🏗️🚗

در این بخش یاد می‌گیریم چطور یک نقشه‌یِ واقعی (Class) در PHP بنویسیم و از رویِ آن، هزاران نسخه‌یِ واقعی (Object) بسازیم.

ساختارِ یک کلاس

کلاس شاملِ دو بخش است: Property (ویژگی‌ها یا متغیرها) و Method (رفتارها یا توابع).

{code_block('class Car {\n public $color;\n function drive() { return "Moving..."; }\n}')}

کلمه کلیدیِ $this

این کلمه به "شیءِ فعلی" اشاره می‌کند. وقتی می‌خواهید به ویژگی‌هایِ خودِ کلاس از داخلِ متدها دسترسی داشته باشید، از $this استفاده می‌کنید.

{code_block('function set_color($c) {\n $this->color = $c;\n}')}
ساختِ شیء (Instantiation): برای ساختنِ یک نمونه‌یِ واقعی از کلمه‌یِ new استفاده می‌کنیم: {code_block('$myCar = new Car();')}
عملگرِ فلش (->): در PHP برایِ دسترسی به متعلقاتِ یک شیء از -> استفاده می‌شود، نه نقطه (مثل جاوااسکریپت یا جاوا).

بررسی نوعِ شیء:

با تابعِ instanceof می‌توانید چک کنید آیا یک لایه یا متغیر، متعلق به یک کلاسِ خاص هست یا خیر.

متدهای Getter و Setter

این یک استانداردِ حرفه‌ای است که مستقیماً به متغیرهایِ کلاس دست نزنید و از توابع مخصوص برای خواندن و نوشتن استفاده کنید تا بتوانید داده‌ها را چک کنید.

<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
سوال تمرین

یک متد به نام get_name داخلِ کلاسِ Fruit بنویسید که ویژگیِ $this->name را برگرداند.

پاسخ تمرین
PHP
<?php
class Fruit {
  public $name;
  function get_name() {
    return $this->name;
  }
}
?>

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

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