بعد از این درس دقیقاً چه بلدی؟
- موضوع «public» را با زبان ساده برای فرد دیگری توضیح میدهی.
- مثال همین درس را خطبهخط میخوانی و خروجی آن را پیشبینی میکنی.
- کد را تغییر میدهی، نتیجه یا ساختار آن را بررسی میکنی و خطا را مرحلهای اصلاح میکنی.
دستگاه خودپرداز
کاربر مستقیم به صندوق پول دسترسی ندارد؛ فقط عملیات مجاز برداشت و واریز را با کنترل دستگاه انجام میدهد.
Encapsulation اجازه نمیدهد هر بخش برنامه وضعیت داخلی شیء را آزادانه خراب کند. تغییر از طریق Methodهایی با قانون روشن انجام میشود.
چرا مهم است؟ این مفهوم یکی از آجرهای مسیر حرفهای PHP است. فعلاً لازم نیست همه جزئیات را حفظ کنی؛ باید دلیل استفاده و اثر هر خط را بفهمی.
اولین تمرین تو: موجودی نباید مستقیم منفی شود. متد withdraw مبلغ را بررسی میکند و فقط در حالت معتبر تغییر میدهد.
اول بفهم، بعد کد بنویس
public
از بیرون کلاس قابل دسترسی است.
private
فقط داخل همان کلاس قابل استفاده است.
Invariant
قانونی است که شیء معتبر همیشه باید حفظ کند.
موجودی حساب
موجودی نباید مستقیم منفی شود. متد withdraw مبلغ را بررسی میکند و فقط در حالت معتبر تغییر میدهد.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
کد را کامل کن و ساختار آن را بررسی کن
این درس وارد قابلیتهای سروری یا حرفهای شده است. برای امنیت سایت، کد دلخواه روی سرور اجرا نمیشود؛ بررسیگر، وجود اجزای ضروری و منطق مورد انتظار را کنترل میکند و راهنمای اصلاح میدهد.
کد را کامل کن و «بررسی ساختار» را بزن.
این مثال خطبهخط چه میگوید؟
فعلاً حفظ نکن؛ هر خط را به یک جمله ساده تبدیل کن.
- 1
<?phpاز اینجا مفسر PHP شروع به خواندن کد میکند.
- 2
final class Wallet {این خط بخشی از منطق اصلی مثال است؛ نامها و علامتها را از راست به چپ، بخشبهبخش بخوان.
- 3
public function __construct(private int $balance) {}یک کار نامگذاریشده تعریف میشود تا منطق آن قابل استفاده دوباره و قابل آزمون باشد.
- 4
public function withdraw(int $amount): void {یک کار نامگذاریشده تعریف میشود تا منطق آن قابل استفاده دوباره و قابل آزمون باشد.
- 5
if ($amount <= 0 || $amount > $this->balance) {یک پرسش درست/نادرست بررسی میشود و مسیر اجرای بعدی را تعیین میکند.
- 6
throw new DomainException("برداشت نامعتبر است");این خط بخشی از منطق اصلی مثال است؛ نامها و علامتها را از راست به چپ، بخشبهبخش بخوان.
- 7
}مرز یک بلوک یا فراخوانی در اینجا باز یا بسته میشود.
- 8
$this->balance -= $amount;این خط بخشی از منطق اصلی مثال است؛ نامها و علامتها را از راست به چپ، بخشبهبخش بخوان.
- 9
}مرز یک بلوک یا فراخوانی در اینجا باز یا بسته میشود.
- 10
public function balance(): int { return $this->balance; }یک کار نامگذاریشده تعریف میشود تا منطق آن قابل استفاده دوباره و قابل آزمون باشد.
- 11
}مرز یک بلوک یا فراخوانی در اینجا باز یا بسته میشود.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
متد deposit را اضافه کن و مقدار صفر، منفی و بیشتر از موجودی را آزمایش کن.
از ساده به چالشی، بدون پرش
یکی از مقدارهای مثال را عوض کن، خروجی را روی کاغذ حدس بزن و سپس بررسی کن.
متد deposit را اضافه کن و مقدار صفر، منفی و بیشتر از موجودی را آزمایش کن.
سناریوی «موجودی حساب» را با نامهای واضحتر و یک حالت تازه گسترش بده.
این سه اشتباه را انجام نده
public کردن همه Propertyها
Getter و Setter بدون هیچ قانون
قرار دادن قانون شیء فقط در Controller
5 پرسش کوتاه؛ مطمئن شو واقعاً یاد گرفتهای
برای هر پرسش یک پاسخ انتخاب کن. بعد از هر انتخاب، دلیل پاسخ را همانجا میبینی.
چرا balance خصوصی است؟
کدام توضیح، «public» را دقیقتر بیان میکند؟
بهترین قدم بعد از خواندن مثال این درس چیست؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
درس را فقط وقتی تمام کن که کد را تغییر دادهای
دیدن آموزش کافی نیست؛ یک مقدار را تغییر بده، خروجی را پیشبینی کن و بعد اجرا بزن.