کلاسها و اشیاء (PHP Classes/Objects)
کلاسها و اشیاء: از نقشه تا واقعیت 🏗️🚗
در این بخش یاد میگیریم چطور یک نقشهیِ واقعی (Class) در PHP بنویسیم و از رویِ آن، هزاران نسخهیِ واقعی (Object) بسازیم.
ساختارِ یک کلاس
کلاس شاملِ دو بخش است: Property (ویژگیها یا متغیرها) و Method (رفتارها یا توابع).
{code_block('class Car {\n public $color;\n function drive() { return "Moving..."; }\n}')}کلمه کلیدیِ $this
این کلمه به "شیءِ فعلی" اشاره میکند. وقتی میخواهید به ویژگیهایِ خودِ کلاس از داخلِ متدها دسترسی داشته باشید، از $this استفاده میکنید.
new استفاده میکنیم:
{code_block('$myCar = new Car();')}
-> استفاده میشود، نه نقطه (مثل جاوااسکریپت یا جاوا).
بررسی نوعِ شیء:
با تابعِ 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 کمک میکند تا کدهایِ شما را بسیار بهینهتر اجرا کند.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
یک متد به نام get_name داخلِ کلاسِ Fruit بنویسید که ویژگیِ $this->name را برگرداند.
<?php
class Fruit {
public $name;
function get_name() {
return $this->name;
}
}
?>
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.