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