دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / سطح دسترسی (PHP Access Modifiers)

سطح دسترسی (PHP Access Modifiers)

30 دقیقه Article

سطوحِ دسترسی: مرزهایِ قدرت 🔐🛡️

یکی از ارکانِ اصلیِ OOP، "کپسوله‌سازی" (Encapsulation) است. یعنی ما تعیین می‌کنیم چه کسی به اطلاعاتِ داخلِ کلاس دسترسی داشته باشد.

سه سطحِ دسترسی در PHP:

  1. public: آزاد برایِ همه! از هر جایِ برنامه می‌توان به آن دسترسی داشت. (پیش‌فرض)
  2. protected: فقط برایِ "خودی‌ها"! فقط داخلِ خودِ کلاس و کلاس‌هایی که از آن ارث برده‌اند قابلِ استفاده است.
  3. private: کاملاً شخصی! فقط و فقط داخلِ همان کلاس قابلِ دسترسی است.

چرا از Private استفاده کنیم؟

برایِ جلوگیری از دستکاریِ اشتباهِ داده‌ها. مثلاً "موجودیِ حساب" نباید مستقیماً قابلِ تغییر باشد؛ باید از طریقِ یک متدِ واریز (Deposit) که محدودیت‌ها را چک می‌کند، تغییر یابد.

خطایِ بحرانی: تلاش برایِ دسترسی به یک ویژگیِ private از بیرونِ کلاس، باعثِ توقفِ برنامه با خطایِ Fatal Error می‌شود.
توصیه‌یِ حرفه‌ای: همیشه همه‌یِ ویژگی‌ها را private یا protected تعریف کنید و فقط از طریقِ متدهای public به آن‌ها دسترسی بدهید.

ست کردنِ دسترسی:

{code_block('class Bank {\n private $balance;\n protected $accountType;\n public $name;\n}')}
دسترسی به متدها: این سطوحِ دسترسی فقط برایِ متغیرها نیست؛ برایِ توابع (Methods) هم دقیقاً به همین صورت عمل می‌کنند.
<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 استفاده کنید. این کار باعث می‌شود خطاهایِ منطقی در زمانِ توسعه پیدا شوند و از رفتارهایِ پیش‌بینی‌نشده در هنگامِ کار با متدها جلوگیری شود.

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

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

تعریفِ ویژگیِ خصوصی Easy
سوال تمرین

در کلاسِ User، یک ویژگی به نام password را به صورت private تعریف کنید.

پاسخ تمرین
PHP
<?php
class User {
  private $password;
}
?>

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

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