1. 程式人生 > >php中static和self調用靜態方法區別

php中static和self調用靜態方法區別

php

由於看到框架裏面經常使用static::method() 於是稍微了解下static和self的區別

廢話少說,直接上代碼

class Father
{
	public function __construct()
	{
		$this->init();
		
		self::test();
	}

	public static function test()
	{
		echo "father test....<br>";
	}

	public function init()
	{
		echo 'father init...<br>';
	}
}

class Son extends Father
{
	public function init()
	{
		echo 'son init..<br>';
	}

	public static function test()
	{
		echo "son test..<br>";
	}
}

$son_obj = new Son();


顯示結果:

son init..
father test....


分析結果看,調用init非靜態方法已經被子類覆蓋了,但使用self調用靜態方法還是使用的是父類的test靜態方法

於是我們將代碼修改成static

class Father
{
	public function __construct()
	{
		$this->init();
		
		static::test();
	}

	public static function test()
	{
		echo "father test....<br>";
	}

	public function init()
	{
		echo 'father init...<br>';
	}
}

class Son extends Father
{
	public function init()
	{
		echo 'son init..<br>';
	}

	public static function test()
	{
		echo "son test..<br>";
	}
}

$son_obj = new Son();


出現的結果是:

son init..
son test..


使用static調用靜態方法使用了當前分類的靜態方法

php中static和self調用靜態方法區別