<?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)
我认为$this
中的Class B
始终意味着Class B
的对象。但似乎没有,任何人都可以解释:为什么var_dump($this);
class B
,下面的输出结果不是object(B)
?
object(A)[1]
public 'name' => string 'A' (length=1)
答案 0 :(得分:1)
如果在启用完整错误记录的情况下运行此命令,则会解释原因:
严格标准:不应静态调用非静态方法B :: request(),假设来自第6行/php/tests/o2.php中不兼容上下文的$ this
所以基本上,在静态调用的方法中使用$ this是没有意义的,所以PHP实际上尝试应用上下文....看起来它从调用方法应用$ this