<?php
class A 
{
    public function test() {
        $this->testPrivate();
        $this->testPublic();
    }    public function testPublic() {
        echo "类A的testPublic()方法";
    }
    
    private function testPrivate() {
        echo "类A的testPrivate()方法\n";
    }
}class B extends A 
{
    public function testPublic() {
        echo "类B的testPublic()方法\n";
    }
    
    private function testPrivate() {
        echo "类B的testPublic()方法\n";
    }
}$obj = new B();
$obj->test();
?>
输出结果是:类A的testPrivate()方法类B的testPublic()方法
为什么$this->testPrivate();
        $this->testPublic();调用的方法不是属于同一个类的?

解决方案 »

  1.   

    private是本类可以调用,这样一来它的子类就无法重写该方法了,所以子类继承这个父类后无法重写掉private类型的方法,所以在父类本身调用的时候根据作用域优先级别来调用,那么首先调用本类的该方法,而public的由于子类可以继承到该类型方法,所以直接就被重写掉了(如果你对该方法进行了重写)
      

  2.   

    所以子类继承这个父类后无法重写掉private类型的方法,所以在父类本身调用的时候根据作用域优先级别来调用,那么首先调用本类的该方法
    这个描述欠妥当,private 成员只在定义的类中可访问,无论是其父类还是子类都无法访问
    你可以将类 A 中的
      private function testPrivate() {
      echo "类A的testPrivate()方法\n";
      }
    去掉
    在执行
    $obj = new B();
    $obj->test();
    看看
      

  3.   

    key:
    1 子类中的test函数是继承父类而来的
    2 private表明这个函数只可以在类的内部被访问
    3 private不能被继承当你用子类实例化对象后,并调用父类继承而来的函数时,这个函数是属于父类的(虽然被子类继承) 
    而private的函数只能在内部被使用
    所以这个属于父类的函数如果需要调用private函数的话,那么他只能调用父类中的private。public可以被继承,没有此问题
      

  4.   

    如果考虑继承的,最好还是把那个private定义为protected更合理些,你那样写,整个程序给人感觉就不伦不类的,如果不懂使用继承,个人建议写PHP还是尽量把类搞简单些,起码别人看你程序也容易懂些
      

  5.   

    public:公共的。可以被自身,子类,和外部调用
    private: 私有的。只能被自身调用
    protected: 受保护的。只能被自身和子类调用。C语言家族都通用的这3个定义。