[PHP] 神奇的 $this
今天發現了一個 PHP 5.2.4 的奇怪現象,查了官方手冊也沒發現有人特別提起 (也可能是我沒找到) 。
學過 PHP 物件導向的人都知道, $this 這個關鍵字是在生成一個物件後才能使用的。例如:
class Foo
{
private $_foo = '_foo in class Foo.';
public function test()
{
echo $this->_foo;
}
}
$foo = new Foo();
$foo->test(); // _foo in class Foo.
而且 $this
在 Class 的程式碼裡代表的也是這個物件本身,在上例中即為 $foo
。
不過在 method 裡使用 $this
有個限制,那就是該 method 不能以 static
的方式來呼叫;也就是說,以下的執行方式是錯的:
Foo::test(); // Fatal error: Using $this when not in object context in xxx.php
可是請看以下的程式碼:
class Foo
{
private $_foo = '_foo in class Foo.';
public function test()
{
echo $this->_foo;
}
}
class Bar
{
public function test()
{
Foo::test();
}
}
$b = new Bar();
$b->test(); // Notice: Undefined property: Bar::$_foo in xxx.php
發現什麼問題了嗎?在 Bar::test()
裡我們竟然可以用 static 的方式呼叫 Foo::test()
! 而且在 Foo::test()
裡的 $this->_foo
竟然變成了 Bar
類別的 $_foo
屬性!
至於這倒底是 PHP 的特色還是 Bug ?我也不知道,還望高手賜教。