• array_walk函数与call_user_func_array函数


        一, php手册的解释:
    call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数 

    说明:
    mixed  call_user_func_array  ( callable  $callback  , array $param_arr  )
    把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。

    参数
    callback   被调用的回调函数。 
    param_arr  要被传入回调函数的数组,这个数组得是索引数组。 

    返回值
    返回回调函数的结果。如果出错的话就返回 FALSE 

    array_walk — 使用用户自定义函数对数组中的每个元素做回调处理

    说明
    bool array_walk  ( array &$array  , callable  $funcname  [, mixed  $userdata  = NULL    ] )

    将用户自定义函数 funcname 应用到 array 数组中的每个单元。 array_walk() 不会受到 array 内部数组指针的影响。
    array_walk()  会遍历整个数组而不管指针的位置。 

    参数
    array 输入的数组。 
    funcname  典型情况下 funcname 接受两个参数。array 参数的值作为第一个,键名作为第二个。 


    Note1: 
    如果 funcname 需要直接作用于数组中的值,则给 funcname 的第一个参数指定为引用。这样任何对这些单元的改变也将会改变原始数组本身。 


    Note2: 
    Many internal functions (for example strtolower() ) will throw a warning if more than the expected number of argument are
    passed in and are not usable directly as funcname. 


    只有 array 的值才可以被改变,用户不应在回调函数中改变该数组本身的结构。例如增加/删除单元,unset 单元等等。如果 array_walk()  
    作用的数组改变了,则此函数的的行为未经定义,且不可预期。 


    userdata 
    如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname。 


    返回值
    成功时返回 TRUE , 或者在失败时返回 FALSE 。

    二,实例
    array_walk()函数应用实例:


     $fruits  = array( "d"  =>  "lemon" ,  "a"  =>  "orange" ,  "b"  =>  "banana" ,  "c"  =>  "apple" );
     function  test_alter (& $item1 ,  $key ,  $prefix )
    {
       $item1  =  " $prefix :  $item1 " ;
     }

     function  test_print ( $item2 ,  $key )
    {
       echo  " $key .  $item2 <br /> " ;
     }
     echo  "Before ...:<br/>" ;
     array_walk ( $fruits ,  'test_print' );
     echo  "... and after:<br/>" ;
     array_walk ( $fruits ,  'test_alter' ,  'fruit' );
     array_walk ( $fruits ,  'test_print' );


    call_user_func_array()函数应用实例:

    1,在类中的使用:
    function  foobar ( $arg ,  $arg2 )
    {
        echo  __FUNCTION__ ,  " got  $arg  and  $arg2 " ;
    }
    class  foo  
    {
        function  bar ( $arg ,  $arg2 )
       {
            echo  __METHOD__ ,  " got  $arg  and  $arg2 " ;
        }
    }

     // Call the foobar() function with 2 arguments
     call_user_func_array ( "foobar" , array( "one" ,  "two" ));

     // Call the $foo->bar() method with 2 arguments
     $foo  = new  foo ;
     call_user_func_array (array( $foo ,  "bar" ), array( "three" ,  "four" ));


    2,作为一个完整的函数的传入:
    function fnCallBack( $msg1 , $msg2 )
    {
        echo 'msg1:'.$msg1;
        echo "<br /> ";
        echo 'msg2:'.$msg2;
    }

    $fnName = "fnCallBack"; //方法名
    $params = array( 'hello' , 'world' );//传给参数的值
    call_user_func_array( $fnName , $params );

    之所以写这些,是发现自己对这两个函数的概念和使用不是很清楚,因此重温一下。至于这两个函数的差别,个人感觉不是很大。
    当遇到如下场景:要调用的函数名以及要调用函数的参数类型及个数也是未知的,因为未知,所以这个时候用call_user_func_array这样的函数。








     






  • 相关阅读:
    世界充满神秘的不平衡:创业中的“二八”法则
    树立个人品牌:从名字开始
    房子,心中的痛
    今生,谁会是我最美丽的新娘
    失败不是创业的结束,因为有了你们,这世界才璀璨(转载)
    再等五百年
    名字作诗:为您的名字增添一份色彩
    揭开爱情的外衣
    李子楠(帮客户名字作诗)
    爱上你,早已是命中注定
  • 原文地址:https://www.cnblogs.com/cmderq/p/9130876.html
Copyright © 2020-2023  润新知