ابهام در دسترسی به اعضای کلاس private از داخل کلاس child

پرسیده شده
فعالیت 1165 روز پیش
دیده شده 381 بار
0

سلام خسته نباشید توی مثال زیر خروجی برام ابهام داره مگه متد 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
فایل پیوست

محمد محمدی
محمد محمدی

28 بهمن 99

0
حذف شده

سلام و احترام

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

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

فایل پیوست

امیر صالحی

توسط

امیر صالحی

30 بهمن 99