`
chinagdvea
  • 浏览: 131234 次
  • 性别: Icon_minigender_1
  • 来自: 韶关
社区版块
存档分类
最新评论

php __call()与call_user_func_array()理解

 
阅读更多
1. mixed __call ( string name, array arguments )

The magic method __call() allows to capture invocation of non existing methods. That way __call() can be used to implement user defined method handling that depends on the name of the actual method being called. This is for instance useful for proxy implementations. The arguments that were passed in the function will be defined as an array in the $arguments parameter. The value returned from the __call() method will be returned to the caller of the method.

译文: 这个魔术方法允许用户调用类中不存在的方法,它用于实现那些 依赖于在被调用时的真正方法名的方法. 典型的例子是用来实现代理. 方法的参数$arguments是一个数组 ,__call()的返回值返回给方法调用者

白话文: 这个方法主要是用来实现动态方法调用, 如果再一个类定义了__call()这个方法, 当用户调用这个类的一个不存在的方法时,他可以使用调用的那个不存在的方法的方法名和参数做出用户定义在__call()方法体内的相应操作,此时__call()方法的参数就是被调用的那个不存在的方法的方法名和参数

例子

<?php

class Person
{
	function talk( $sound )
	{
		echo $sound;
	}
				
	function __call( $method , $args )
	{
		echo 'you call method ' . $method . '<br>';
					
		echo 'and the arguments are <br>';
					
		var_dump( $args );
	}
}

$person = new Person();
			
$person->test( 1 , TRUE );

?>


程序输出

引用
you call method test
and the arguments are
array
  0 => int 1
  1 => boolean true




2. mixed call_user_func_array ( callback function, array param_arr )


Call a user defined function with the parameters in param_arr.

参数


function
The function to be called.

param_arr
The parameters to be passed to the function, as an indexed array.


返回值
Returns the function result, or FALSE on error.

此方法可以通过传入类名,类中得方法名和方法参数达到动态调用方法的效果

例子

<?php 
	class Person
	{
		function talk( $sound )
		{
			echo $sound;
		}
				
		function __call( $method , $args )
		{
			echo 'you call method ' . $method . '<br>';
					
			echo 'and the arguments are <br>';
					
			var_dump( $args );
		}
	}

        $person = new Person();
			
	call_user_func_array( array( $person , 'talk' ) , array( 'hello' ) );
?>


程序输出

引用
hello



两个方法共用,实现代理模型

       
class Person
	{
		function talk( $sound )
		{
			echo $sound;
		}
				
		function __call( $method , $args )
		{
			echo 'you call method ' . $method . '<br>';
					
			echo 'and the arguments are <br>';
					
			var_dump( $args );
		}
	}
			
	class PersonProxy
	{
		private $person;
				
		function __construct()
		{
			$this->person = new Person();
		}
		
		function __call( $method , $args )
		{
			call_user_func_array( array( $this->person , $method ) , $args );
		}
	}
			
	$person_proxy = new PersonProxy();

        $person_proxy->talk( 'thank you' );	


程序输出

引用
thank you
分享到:
评论
1 楼 chinagdvea 2011-12-07  

相关推荐

    php自定义函数call_user_func和call_user_func_array详解

    `call_user_func_array` 与 `call_user_func` 类似,但参数传递方式不同。它接受一个参数数组,使参数结构更加清晰。 基本语法是: ```php call_user_func_array(callback $function, array $parameters); ``` - ...

    PHP中call_user_func_array回调函数的用法示例

    call_user_func_array call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数 mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一个参数作为回调函数(callback)...

    PHP call_user_func和call_user_func_array函数的简单理解与应用分析

    - `call_user_func_array` 与 `call_user_func` 类似,但更加强大,它允许你将一个参数数组传递给回调函数。 - 这个函数接受两个参数:第一个是回调函数,第二个是一个包含参数的数组,如 `call_user_func_array('...

    解析php中call_user_func_array的作用

    }//调用test方法,array(“asp”, ‘php’)对应相应的参数call_user_func_array(‘test’, array(“asp”, ‘php’)); 二、通过类调用类中的方法复制代码 代码如下:class test2{function phpSay($a, $b) {echo ‘测试...

    PHP 函数call_user_func和call_user_func_array用法详解

    call_user_func函数是当需要动态调用函数时,才使用的,这个函数有两种用法:第一种是调用孤独的函数:复制代码 代码如下:&lt;?phpfunction funa($b,$c){ echo $b; echo $c;}call_user_func(‘funa’, “111”,”...

    php代码-call_user_func and call_user_func_array

    call_user_func_array(function_name, array_of_params); ``` 这个函数的第一个参数同样是函数名,但第二个参数是一个数组,其中每个元素将作为参数传递给函数。看下面的例子: ```php function myFunctionWithArray...

    PHP中call_user_func_array()函数的用法演示

    `call_user_func_array()` 是 PHP 中的一个非常有用的函数,它允许你通过数组传递参数来调用用户自定义的函数或类的方法。这个函数在处理动态参数列表或需要灵活调用不同函数的场景下非常有用。 函数签名如下: ``...

    php中call_user_func函数使用注意事项

    4. PHP还提供了call_user_func_array()函数,它和call_user_func功能类似,但是允许以数组的形式传递参数,使得参数结构更加清晰。使用call_user_func_array()时,第一个参数是一个包含回调的数组,后续参数是要传递...

    call_user_func:call_user_func()的基准研究

    或 : $ result = call_user_func_array ( $ callable ); 这具有简单性的巨大优势,但是不幸的是,它比直接调用慢。 由于每个Callable类型将需要它自己的调用方法,因此该衬垫还隐藏了一些复杂性。 如果我们在哪里...

    浅析PHP中call user func()函数及如何使用call user func调用自定义函数

    与`call_user_func()`不同,`call_user_func_array()`接受一个参数数组 `$param_arr`,它包含了传递给被调用函数的所有参数。这样,参数的结构更加清晰,特别是当参数数量不确定或者需要批量传递参数时非常有用: `...

Global site tag (gtag.js) - Google Analytics