• 1 رای - 4 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ارث بری
#1
سلام
داکیومنت های پی اچ پی رو نگاه می کردم که به این مثال خوردم:
کد:
<?php
class Base
{
public function test() {
$this->testPrivate();
$this->testPublic();
}

public function testPublic() {
echo "Base::testPublic\n";
}

public function testPrivate() {
echo "Base::testPrivate\n";
}
}

class Child extends Base
{
public function testPublic() {
echo "Child::testPublic\n";
}

private function testPrivate() {
echo "Child::testPrivate\n";
}
}

$myFoo = new Child();
$myFoo->test(); // Base::testPrivate
// Child::testPublic
?>
اینجا متد تست رو از کلاس child اجرا کردیم پس چرا متد testPrivate رو از کلاس Base اجرا کرد؟
  پاسخ
تشکر شده توسط :
#2
خیر براساس قوانین ارث بری، متد test از کلاس والد اجرا شده است.
متد های دیگر اصطلاحا overwrite شده اند.
سالهــــا مـــــى گــــــذرد، حادثه ها مى آید
انتظـــــار فـــــــرج از نیمـــــه خــــــرداد کشم

[عکس: ShowPicture.aspx?ID=52750d12-5d92-4286-9...height=100]
  پاسخ
تشکر شده توسط :
#3
(۱۳۹۴ شهریور ۰۳, ۱۱:۰۹ ب.ظ)shgninc نوشته: خیر براساس قوانین ارث بری، متد test از کلاس والد اجرا شده است.
متد های دیگر اصطلاحا overwrite شده اند.

خوب این کد متد تست پرایویت رو از کلاس child و تست پابلیک رو از base اجرا کرده! یعنی دو کلاس متفاوت، اگه قراره کل تست رو از base آجرا کنه چرا پرایویت تست child رو اجرا کرده؟
  پاسخ
تشکر شده توسط :
#4
درضمن مثال شما یه ایراد داره، اونم سطح دسترسی همه متد testPrivate ت باید مثل هم باشن یا Protected

اگر سطح دسترسی همه متدهای testPrivate پابلیک بشن، php متد مال کلاس بچه رو اجرا می کنه
اگر سطح دسترسی همه متدهای testPrivate پرایوت بشن، php متد مال کلاس پدر رو اجرا می کنه
نقل قول:Members declared as private may only be accessed by the class that defines the member.

همچنین در ارث بری، بهتره متدها و پروپرتی هارو Protected تعریف کنی (معمولاً همینکارو می کنن)
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط : hamid_80386
#5
(۱۳۹۴ شهریور ۰۴, ۰۲:۲۴ ق.ظ)Y.P.Y نوشته: درضمن مثال شما یه ایراد داره، اونم سطح دسترسی همه متد testPrivate ت باید مثل هم باشن یا Protected

اگر سطح دسترسی همه متدهای testPrivate پابلیک بشن، php متد مال کلاس بچه رو اجرا می کنه
اگر سطح دسترسی همه متدهای testPrivate پرایوت بشن، php متد مال کلاس پدر رو اجرا می کنه
نقل قول:Members declared as private may only be accessed by the class that defines the member.

همچنین در ارث بری، بهتره متدها و پروپرتی هارو Protected تعریف کنی (معمولاً همینکارو می کنن)
خیلی ممنونم Smile
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان