<?php
class Root
{
   function myFun()
   {  
     echo "root myfun<br>";
 
   }
   
   function myfunRoot()
   {
 echo "myfun root";

    }

    protected function FFun()
{
   echo "我是父类函数";  

}
  

}
class Sub extends Root
{
  
 
   function myFun() //重载
   {  
     echo  root::myFun(). " Son myfun<br>";  //使用父类函数
 
   }    
   
   function sonFun()
   {
  echo $this->myfunRoot()." son is son<br>";   
   
   }
   
   
   function SonFFun()
   {    
  $this->FFun();   
   }
   

}$p=new Sub();
$p->SonFFun();?>
就是在子类里,用 $this-> 为什么可以访问父类里 protected 的函数??而子类的对象却不行??如果说只允许在父类和子类里访问 protected 的属性和方法, 而对象不允许, 那么$this 是不是代表对象? 为啥 $this 却可以呢?

解决方案 »

  1.   

    $this 的含义是表示  实例化后的 具体对象!我们一般是先声明一个类,然后用这个类去实例化对象!但是,当我们在声明这个类的时候,想在类本身内部使用本类的属性或者方法。应该怎么表示呢?例如:我声明一个User类!它只含有一个属性 $name;class User
    {
          public $_name;
    }现在,我给User类加个方法。就用getName()方法,输出$name属性的值吧!class User
    {
         public $name;     function getName()
         {
                echo $this->name;
         }
    }//如何使用呢?$user1 = new User();$user1->name = '张三';$user1->getName();        //这里就会输出张三!$user2 = new User();$user2->name = '李四';    $user2->getName();       //这里会输出李四!怎么理解呢?我上面创建了两个User对象。分别是 $user1 和  $user2 。当我调用 $user1->getName()的时候。  上面User类中的代码 echo $this->name ; 就是相当于是  echo $user1->name;大概就是这么个意思!
      

  2.   

    不对啊!! 不是说对象不允许访问  protected 属性的吗?那为什么 $this 这个对象可以访问?
      

  3.   

    我问的是 为什么 $this 这个对象可以 访问 protected 属性
      

  4.   

    protected的属性和方法只能在类内部或者继承子类内部访问.
    事实上你就算实例化那个父类,此父类的对象依然不可以在外部引用FFun()
    你可以试一试
    /*******************/
    $p2 = new Root();
    $p2->FFun();
    /*******************/
    上面应该会报错的
      

  5.   

    联系想下private,就知道异同点了
      

  6.   

    确切的说,$this它并不是一个对象,有些地方说它是指针,是指向当前被实例化的对象,它只是一个地址,可以调用本身的属性,父类的方法就是它该类的方法,你说能不能调用
      

  7.   

    6楼的是正解,都差点忘记那点事了
      只能是在子类的内调用,在其他类,new 一个子类对象是不能调用protectec方法的,