1
<?php
class A {
    var $name= 'A';
    function main($objC){
        var_dump($this);B::request('init', $objC);
    }

}
class B {
    var $name= 'B';
    function request($func, $objC){
        if (method_exists($objC, $func)){
            var_dump($this);$objC->$func($this);
        }
    }

}
class C {
    var $name= 'C';
    function init($pobj){       
        var_dump($this);
    }
}
$objA =  new A;
$objB = new B;
$objC = new C;
$objA->main($objC);

输出:

object(A)[1]
  public 'name' => string 'A' (length=1)

object(A)[1]
  public 'name' => string 'A' (length=1)

object(C)[3]
  public 'name' => string 'C' (length=1)

我以为$thisinClass B总是意味着那个对象Class B。但似乎不是,任何人都可以解释:为什么var_dump($this);class B,结果下面的输出不是object(B)

object(A)[1]
      public 'name' => string 'A' (length=1)
4

1 回答 1

1

如果您在启用完整错误日志记录的情况下运行它,它将解释原因:

严格标准:不应静态调用非静态方法 B::request(),假设 $this 来自第 6 行 /php/tests/o2.php 中的不兼容上下文

所以基本上,在静态调用的方法中使用 $this 是没有意义的,所以 PHP 实际上试图应用一个上下文......并且看起来它从调用方法中应用了 $this

于 2013-08-21T09:39:08.280 回答