php常用関数処理の関数

3400 ワード

=========================================
func_get_arg-パラメータリストのいずれかを返します
func_get_args-関数パラメータリストを含む配列を返します.
func_num_Args-関数に渡されるパラメータの数を返します
call_user_func-最初のパラメータをコールバック関数として呼び出す
call_user_func_Array-コールバック関数を呼び出し、配列パラメータをコールバック関数のパラメータとします.
forward_static_call_array — Call a static method and pass the arguments as array
forward_static_call-静的メソッドを呼び出し、パラメータを配列として渡します.
=========================================
一、func_get_arg、func_get_arg、func_num_args
class test{
  public function hello($a,$b,$c,$d){
   $num=func_num_args();
   echo "        :".$num,"
"; if(2<=$num){ echo " :".func_get_arg(2)."
"; } $num2=func_get_args(); for($i=0;$i"; } } } $T=new test(); $T->hello('A','B','C','D'); // :4 // :C // 0 A // 1 B // 2 C // 3 D

二、call_user_func、call_user_func_array
1、call_user_func
namespace Foobar;  
class Foo {  
    static public function test($param) {  
        echo "Hello world! ".$param;  
    } 

    public function test($param) {  
    	echo  "Hi everybody! ".$param;  
    }  
}  
//1、      ,      ,      3     
$param = 'param'  
call_user_func(__NAMESPACE__ .'\Foo::test',$param);  
call_user_func(array(__NAMESPACE__ .'\Foo', 'test'), $param);//    
call_user_func([Foo::class, 'test'], $param);  

//2、       ,       
$foo = new Foo();  
$param = 'param'  
call_user_func(array($foo, 'test'), $param);  
//           :call_user_func(array($foo, 'test'), $param, $param1, $param2)
//    namespace   
class a { 
	function b($c){ echo $c; } 
} 
call_user_func(array("a", "b"),"111"); //  :111,  array("a", "b") a   b    
//3、    
function a(&$b) 
{ 
$b++; 
} 
$c = 0; 
call_user_func('a', &$c); 
echo $c;//   1

2、call_user_func_array
//1        
function a($b, $c) { 
	echo $b;echo " ";echo $c; 
} 
call_user_func_array('a', array("111", "222")); 
//   111 222

//2     
Class ClassA 
{ 
function bc($b, $c) { 
$bc = $b + $c; 
echo $bc; 
} 
} 
call_user_func_array(array('ClassA','bc'), array("111", "222")); 
//   333 

//3    
function a(&$b) 
{ 
$b++; 
} 
$c = 0; 
call_user_func_array('a', array(&$c)); 
echo $c;//   1

3、両者の違い:
1、パラメータフォーマット:
call_user_func(array('クラス名','メソッド名'),$param 1,$param 2,$param 3)
call_user_func_array('クラス名','メソッド名'),array($param 1,$param 2,$param 3))
2、運行速度:
# Operation                        Seconds
#Literal function(一般関数)1.218
#Variable function(変数関数)1.305
# call_user_func()                  2.734
# call_user_func_array()            3.386
200万回反復した結果,変数関数と一般関数呼び出し(literal function)の速度の差は大きくなく,call_user_funcはその2倍,call_user_func_arrayはその3倍であった.
したがって、call_の使用はできるだけ避けてください.user_func_arrayは変数関数を使用する傾向があります.わずかな関数で5つ以上のパラメータがあるので、上のコードでは1~5つの関数の呼び出しを変数関数で書き、一部の関数だけをcall_user_func_array呼び出しにより、プログラムの実行速度を最大化します.実は、もしあなたのプログラムが'call_を呼び出すだけならuser_func_array'は数千回以下で、これらの違いは非常に小さく(0.002秒程度)、最適化する必要はありません.