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

相关文章
相关标签/搜索