class test1{   public function t1(){
   echo "hello world";
   }
   public function t11(){
   $this->t1();
   }
}class test2{
  function t2(){
  test1::t1();
  }
  function t22(){
  test1::t11();
  }}
$ts=new test1();
$ts2=new test2();
$ts->t1()."<br>";
$ts->t11()."<br>";$ts2->t2()."<br>";//出错
$ts2->t22()."<br>";//出错

解决方案 »

  1. class test1{
       public function t1(){
       echo "hello world";
       }
       public function t11(){
       $this->t1();
       }
    }class test2{
      function t2(){
      @test1::t1(); //回避错误
      }
      function t22(){
      @test1::t11(); //回避错误
      }}
    $ts=new test1();
    $ts2=new test2();
    $ts->t1()."<br>";
    $ts->t11()."<br>";$ts2->t2()."<br>";//就不出错了
    $ts2->t22()."<br>";//就不出错了但是需要注意的是:自 php5.3 起 php 搞了个所谓的“正规化”,把一个原本简单灵活的类活生生的绑架在 java 这个十字架上!....
      

  2. $ts2->t22()."<br>";//就不出错了
    这个还是有问题
      

  3. test1::t11(); 这是静态访问
    function t11(){
       $this->t1(); 这是动态访问静态访问时,动态成员是无效的所以说 php 把类弄死了,也不是一点道理也没有的
      

  4. $ts2->t22()."<br>";//这个肯定是出错了,   function t22(){
      test1::t11();
      }public function t11(){
       $this->t1();
       }
    $ts2这个$this指的是class test2,而不是class test1,class test2中没有t1(),当然就出错了。
      

  5. <br>  这个其实不用也没事
      

  6. 其实我想说的是:1、如果你::这样调用的话,请把方法封装成 static2、如果你->这样调用的话,请你先实例化 class
      

类似问题 »