1. 程式人生 > >php 後知後覺

php 後知後覺

查看 class a 道路 pan highlight 是不是 ech 項目 我沒

1.$this :動態調用,指當前對象

通過一個例子,說明一下我當時的心理歷程:

/**
* 父類
*/
class A 
{
	
	function show()
	{
		echo $this->msg();
	}

	function msg(){
		return "";
	}

}

這是父類,裏面有兩個方法, 我看到了show調用了msg,msg裏面不是沒有東西嗎?這有什麽意思? 是不是**啊? (→_→)

然後再寫了他的一個子類:

/**
* A的子類之一
*/
class B extends A
{
	
	function msg()
	{
		return "this is child";
	}
}

$b_obj=new B;
echo $b_obj->show();

根據查看的項目裏A類的子類,我發現在A的子類裏都會重寫A類的msg()方法,最終調用的還是子類自己的方法。 產生這個問題的原因就是 我沒理解 $this 的 真正意義。

通過上面的輸出,在頁面上可以看到結果:這是子類的輸出。

在A類的show方法裏 var_dump($this); 結果是: object(B)#1 (0) { } 也就是說 實例化B 調用show方法,根據繼承關系 會找到A類裏的show 方法,

$this是動態調用,$this指當前對象,這個時候的當前對象不一定就是A類的實例化對象啊,這時候的$this 是B類的實例化對象。

然後$this->msg();就等於是B類的實例化對象調用自己的msg方法。

如果A類裏show 方法這樣寫 echo A::msg(); 那麽就是寫死的調用,就是調用A類自己的方法。

弄明白了這個,真的覺得自己是菜的難受啊...... \(-_-||)/

2017-7-10 在菜的道路上,控制不住記幾,越走越遠......

php 後知後覺