以下是一个例子:
class Test {
public function TestMethod() {
print_r($this); // Gives me "Test1 Object ( )"
}
}
class Test1 {
public function Test1Method() {
Test::TestMethod();
}
}
$test1 = new Test1;
$test1->Test1Method();
我发现这很奇怪。有人可以向我解释为什么会这样吗?
答案 0 :(得分:7)
来自http://www.php.net/manual/en/language.oop5.basic.php:
伪变量
$this
可用 从一个方法中调用一个方法时 对象上下文。$this
是一个参考 到调用对象(通常是 该方法所属的对象, 但可能是另一个对象,如果是 方法从静态调用 次要对象的上下文。)
但这并不一定有意义,并且如果E_STRICT
已启用,则会调出警告。
答案 1 :(得分:4)
简短的回答:你使用静态函数调用调用“非静态”方法,然后php尝试查找“$ this”,最后一个真正的“$ this”是Test1中的那个。
如果您打开E_STRICT错误报告,它会抱怨。
答案 2 :(得分:0)
late static binding如果我没有误会,可能就像星期五晚上一样。