php __call,__callStatic

// demo1.php
<?php

class test
{
	public  function run()
	{
		static::who();
		test::who();
		self::who();
	    $this->who();	
	}

	public  static  function __callStatic($a,$b)
	{
		var_dump('a static call');
	}


	public function __call($a,$b)
	{
		var_dump('a call');
	}
}


$obj  = new test();
$obj->run();
?>

//output
string(6) "a call"
string(6) "a call"
string(6) "a call"
string(6) "a call"


//demo2.php
<?php

class test
{
	public static function run()
	{
		static::who();
		test::who();
		self::who();	
	}

	public  static  function __callStatic($a,$b)
	{
		var_dump('a static call');
	}


	public function __call($a,$b)
	{
		var_dump('a call');
	}
}


$obj  = new test();
$obj::run();

?>

//output

string(13) "a static call"
string(13) "a static call"
string(13) "a static call"

這個實例主要說明調用方法的不一樣 ,__call,__callStatic方法的執行不一樣.php

第一個中,  若是用$obj->run() 的方法調用,那麼在 run 方法內使用this是沒有問題的, 而此時的靜態方法調用是否被替換爲this方法調用, 猜測是這樣的, 具體以要看源碼.函數

在第二個實例中, 使用靜態方法調用, 則直接會使用__callStatic, 說明static 調用方法, 對函數內部的要求更嚴格一點,this

該問題是否可使用程序在內存空間中的訪問方法來解釋呢.code

相關文章
相關標籤/搜索