请教一个 php 作用域问题

2015-05-19 11:22:50 +08:00
 iambic

在读php.net上的文档时,有一个class内方法的作用域问题,没太看明白,代码如下

<?php
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(); // Bar::testPrivate 
                // Foo::testPublic
?>

输出是

Bar::testPrivate 
Foo::testPublic

请问
1. 为什么testPrivate调用的是父类的方法
2. testPublic调用的是子类的方法

php版本5.2.17

多谢

1855 次点击
所在节点    问与答
4 条回复
yangg
2015-05-19 12:08:37 +08:00
私有方法不能重写,test是父类的
ldp940622
2015-05-19 15:29:59 +08:00
私有方法不能重写
jacob
2015-05-19 15:36:35 +08:00
私有方法只能在自己类内部调用,你以bar作用域是无法调用别的类的私有方法的.如果你把bar的testPrivate删了就知道,.
对于public,因为你的this指向的是foo类,所以他调用的是foo的public方法.
iambic
2015-05-19 16:46:52 +08:00
明白了,多谢各位

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/192133

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX