🧬 درس پنجم: مقدمهای بر شیگرایی (OOP)؛ کدنویسی مدرن و ماژولار
🎯 هدف این درس: آشنایی با مفاهیم پایهای برنامهنویسی شیگرا (OOP) در PHP، درک تفاوت آن با برنامهنویسی تابعی (Procedural) و یادگیری ساخت کلاس، شیء، متد و ویژگیها.
مهمان عزیز! 👋
تا اینجا تمام کدهای ما به صورت «تابعی» (Procedural) نوشته میشدند؛ یعنی مجموعهای از توابع و متغیرهای پراکنده. اما وقتی پروژه بزرگ میشود، مدیریت این کدها بسیار دشوار و گیجکننده میگردد.
برنامهنویسی شیگرا (Object-Oriented Programming یا OOP) روشی است که در آن ما کدها را در قالب «اشیاء» دستهبندی میکنیم. هر شیء مانند یک بسته کامل است که دادهها (ویژگیها) و کارهایی که میتواند انجام دهد (متدها) را در خود نگه میدارد.
این سبک کدنویسی استاندارد جهانی است و تمام فریمورکهای مدرن مثل Laravel یا سیستمهایی مثل وردپرس بر اساس آن ساخته شدهاند.
💡 تشبيه ساده:
اگر برنامهنویسی تابعی را مثل «خرید مواد اولیه و آشپزی در لحظه» بدانیم، OOP مثل داشتن «دستگاههای آماده آشپزی» است. شما یک بار دستگاه (کلاس) را میسازید و هر بار که نیاز دارید، از آن استفاده میکنید.
🏗️ مرحله ۱: تعریف کلاس (Class)
کلاس مانند یک «نقشه» یا «الگو» است. مثلاً کلاسی به نام User میسازیم که مشخصات یک کاربر را تعریف میکند.
User.php
PHP
8.x
<?php
class User {
// ویژگیها (Properties): دادههای مربوط به کاربر
public $name;
public $email;
// سازنده (Constructor): وقتی شیء ساخته میشود اجرا میشود
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
// متد (Method): کاری که کاربر میتواند انجام دهد
public function greet() {
return "سلام، من {$this->name} هستم.";
}
}
🚀 مرحله ۲: ساخت شیء (Object) و استفاده از آن
حالا که نقشه (کلاس) را داریم، میتوانیم از روی آن اشیاء واقعی بسازیم. به این کار «نمونهسازی» (Instantiation) میگویند.
index.php
PHP
8.x
<?php
require_once 'User.php';
// ساخت دو کاربر مختلف از روی یک کلاس
$user1 = new User('یونس رجستری', 'younes@rajestary.com');
$user2 = new User('علی احمدی', 'ali@example.com');
// دسترسی به متدها
echo $user1->greet(); // خروجی: سلام، من یونس رجستری هستم.
echo "<br>";
echo $user2->greet(); // خروجی: سلام، من علی احمدی هستم.
🔒 مرحله ۳: مفهوم Encapsulation (کپسولهسازی)
در مثال بالا از کلمه public استفاده کردیم. در OOP سه سطح دسترسی داریم:
1. Public: همه جا قابل دسترسی است.
2. Private: فقط داخل همان کلاس قابل دسترسی است (برای امنیت دادهها).
3. Protected: برای ارثبری استفاده میشود.
SecureUser.php
PHP
8.x
<?php
class BankAccount {
private $balance; // موجودی نباید مستقیم تغییر کند
public function __construct($initialBalance) {
$this->balance = $initialBalance;
}
public function deposit($amount) {
if ($amount > 0) {
$this->balance += $amount;
}
}
public function getBalance() {
return $this->balance;
}
}
❌ خطاهای رایج در شروع OOP
🚫 اشتباه رایج:
فراموش کردن کلمه $this. در داخل کلاس، برای دسترسی به ویژگیها و متدهای همان کلاس حتماً باید از $this-> استفاده کنید.
- تعریف نکردن Constructor: اگر میخواهید شیء هنگام ساخته شدن مقدار اولیه بگیرد، حتماً از
__constructاستفاده کنید. - استفاده بیش از حد از Public: همیشه سعی کنید دادههای حساس را
privateکنید و فقط از طریق متدها به آنها دسترسی دهید.
🏁 جمعبندی درس پنجم
مهمان عزیز، در این درس یاد گرفتی:
- ✅ تفاوت کلاس (نقشه) و شیء (ساختمان ساخته شده).
- ✅ نحوه تعریف ویژگیها (Properties) و متدها (Methods).
- ✅ کاربرد Constructor برای مقداردهی اولیه.
- ✅ اهمیت کپسولهسازی (Encapsulation) با استفاده از private.
🎓 تمرین عملی درس پنجم
یک کلاس به نام Product بساز که ویژگیهای نام، قیمت و تعداد را داشته باشد. متدی بنویس که قیمت نهایی (با احتساب مالیات ۹٪) را محاسبه و برگرداند.
🗺️ نقشه راه دوره: شما اینجا هستید!
برای اینکه بدانی دقیقاً کجای مسیر هستی و چه درسهایی در انتظار توست، به جدول زیر نگاه کن. درس فعلی با رنگ متفاوت مشخص شده است.
| درس | عنوان درس | آنچه یاد میگیرید |
|---|---|---|
| ۱ | ارتباط با دیتابیس (PDO) | اتصال امن به MySQL، جلوگیری از SQL Injection |
| ۲ | مدیریت نشستها (Sessions) | ساخت سیستم لاگین/خروج، مدیریت دسترسی کاربران |
| ۳ | کار با فایلها (File Handling) | آپلود تصویر، خواندن و نوشتن در فایلها |
| ۴ | مدیریت خطاها (Error Handling) | استفاده از Try/Catch، لاگگیری خطاها |
| ۵ | مقدمهای بر شیگرایی (OOP) | کلاس، شیء، متد، ویژگیها |
| ۶ | ساختاردهی پروژه (MVC مقدماتی) | جداسازی منطق از ظاهر، فایلهای Config |
| ۷ | امنیت پیشرفته | هش کردن پسورد، محافظت در برابر XSS و CSRF |
| ۸ | کار با API (مقدماتی) | دریافت داده از API خارجی (cURL)، JSON |
| ۹ | پروژه نهایی سطح متوسط | ساخت وبلاگ کامل با قابلیت لاگین و مدیریت |



