V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
iambic
V2EX  ›  问与答

请教一个 php 作用域问题

  •  
  •   iambic · 2015-05-19 11:22:50 +08:00 · 1849 次点击
    这是一个创建于 3475 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在读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

    多谢

    yangg
        1
    yangg  
       2015-05-19 12:08:37 +08:00 via iPhone
    私有方法不能重写,test是父类的
    ldp940622
        2
    ldp940622  
       2015-05-19 15:29:59 +08:00 via iPhone
    私有方法不能重写
    jacob
        3
    jacob  
       2015-05-19 15:36:35 +08:00
    私有方法只能在自己类内部调用,你以bar作用域是无法调用别的类的私有方法的.如果你把bar的testPrivate删了就知道,.
    对于public,因为你的this指向的是foo类,所以他调用的是foo的public方法.
    iambic
        4
    iambic  
    OP
       2015-05-19 16:46:52 +08:00
    明白了,多谢各位
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1449 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:21 · PVG 01:21 · LAX 09:21 · JFK 12:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.