1. 问答
  2. 问答详情

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

来自php手册的一段代码

子类Foo的对象调用了test()方法,test()方法调用了$this->testPrivate();这个$this此时应该是子类的引用,按理说应该调用子类的testPrivate()方法,实际上却调用了父类的testPrivate()方法


1个回答

0

采纳

是PHP的动态绑定和静态绑定的一种情况。

public是动态绑定,在编译期不绑定,所以在运行期调用父类的test()方法的时候,会解析为子类的public方法。
而private是私有的,不会继承到子类,在编译期就绑定了,是一种“静态”的绑定(类似5.3后的self)。

与这个相关的是LSB,静态延迟绑定,PHP5.3因为有了这个特性之后,使PHP的OOP得到加强。


撰写答案

验证码
点击刷新