iambic
V2EX  ›  问与答

请教一个 php 作用域问题

  •  
  •   iambic · May 19, 2015 · 2490 views
    This topic created in 4086 days ago, the information mentioned may be changed or developed.

    在读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  
       May 19, 2015 via iPhone
    私有方法不能重写,test是父类的
    ldp940622
        2
    ldp940622  
       May 19, 2015 via iPhone
    私有方法不能重写
    jacob
        3
    jacob  
       May 19, 2015
    私有方法只能在自己类内部调用,你以bar作用域是无法调用别的类的私有方法的.如果你把bar的testPrivate删了就知道,.
    对于public,因为你的this指向的是foo类,所以他调用的是foo的public方法.
    iambic
        4
    iambic  
    OP
       May 19, 2015
    明白了,多谢各位
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6044 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 03:20 · PVG 11:20 · LAX 20:20 · JFK 23:20
    ♥ Do have faith in what you're doing.