سلام وقت بخیر
داخل سوالات مربوط به این جلسه یکی از دوستان دقیقا همین سوال رو مطرح کردند اما این سوال برای بنده هنوز ابهام داره
class A {
private function foo() {
echo "success!n
";
}
public function test() {
$this->foo();
static::foo();
}
}
class B extends A {
/* foo() will be copied to B, hence its scope will still be A and
* the call be successful */
}
class C extends A {
private function foo() {
/* original method is replaced; the scope of the new one is C */
}
}
$b = new B();
$b->test();
$c = new C();
انتهای برنامه اومده که یک متغیر تعریف کرده به اسم b و گفته که یک نمونه شی هست از کلاس b . یعنی تمام اعضای public و protected کلاس a رو داره چون کلاس b کلاس a رو ارث بری کرده.
در خط بعد اومده گفته از آبجکت b متد test رو صدا زده.
حالا میریم داخل متد test
خب متد test داخل کلاس b وجود نداره و اون رو از a که پدرش هست ارث بری کرده پس رسیدیم به متد test که داخل کلاس a هست.
حالا داخل کلاس a خط اول متد test گفته شده که
$this->foo();
خب این یعنی از داخل اون آبجکتی که ساخته شده متد foo رو صدا بزن و این متد از آبجکت b ساخته شده و آبجکت b هم یک نمونه از کلاس b هست و کلاس b متد foo رو نداره و به ارث نبرده چون pivate بوه . پس ینی تا همین جا باید به خطا بخوریم ولی خروجی به خطا نمیخوره.
و این که در صورت امکان تمام نکات و عملکرد این کد رو توضیح بدید.
خیلی ممنون