💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ محمد محمدی
ابهام در دسترسی به اعضای کلاس private از داخل کلاس child
جامعه پی اچ پی ایجاد شده در ۲۸ بهمن ۱۳۹۹

سلام خسته نباشید توی مثال زیر خروجی برام ابهام داره مگه متد test توی کلاس Foo عینا کپی نمیشه؟ خب چرا testPrivate رو برای Bar صدا میزنه؟ اگه test داخل Foo باشه پس دیگه به متد testPrivate کلاس Bar دسترسی نداره  و چرا اون رو برای کلاس Foo صدا نمیزنه؟ 

class Bar 
{
    public function test() {
        $this->testPrivate();
        $this->testPublic();
    }
    public function testPublic() {
        echo "Bar::testPublic\n";
    }
    private function testPrivate() {
        echo "Bar::testPrivate\n";
    }
}
class Foo extends Bar 
{
    public function testPublic() {
        echo "Foo::testPublic\n";
    }
    private function testPrivate() {
        echo "Foo::testPrivate\n";
    }
}
$myFoo = new Foo();
$myFoo->test(); 
// output
// Bar::testPrivate 
// Foo::testPublic

سلام و احترام

من مشکل شما رو دقیقا متوجه نشدم، کد که کاملا درسته، شما وقتی bar رو extend میکنید و میاید متد test رو صدا میزنید همون طور که توی متد test شما testPrivate و testPublic رو فراخوانی کردید و حالا وقتی میاید این متد رو از طریق کلاس Foo صدا میزنید خروجی دقیقا همین چیزی که شما قرار دادید

اگه منظورتون اینکه که چرا این خروجیو داده و نباید میداد چون testPrivate یک متد private هستش باید بهتون بگم که شما نمیتونید به صورت مستقیم به private دسترسی داشته باشید ولی مثل همینجا اگه شما getter داشتید باشید (که getter شما اینجا test هستش) خروجی پس درست درمیاد

امیر صالحی ۳۰ بهمن ۱۳۹۹، ۱۵:۳۰