zoukankan      html  css  js  c++  java
  • PHP函数处理方法总结

    call_user_func_array

    (PHP 4 >= 4.0.4, PHP 5, PHP 7)

    call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数

    说明

    mixed call_user_func_array ( callable $callback , array $param_arr )

    把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。

    参数

    callback

    被调用的回调函数。

    param_arr

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

    返回值

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

    更新日志

    版本说明
    5.3.0 对面向对象里面的关键字的解析有所增强。在此之前,使用两个冒号来连接一个类和里面的一个方法,把它作为参数来作为回调函数的话,将会发出一个E_STRICT的警告,因为这个传入的参数被视为静态方法。

    范例

    Example #1 call_user_func_array()例子

    <?php
    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"));
    ?>

    以上例程的输出类似于:

    foobar got one and two
    foo::bar got three and four

    Example #2 call_user_func_array()使用命名空间的情况

    <?php
    
    namespace Foobar;
    
    class Foo {
        static public function test($name) {
            print "Hello {$name}!
    ";
        }
    }
    
    // As of PHP 5.3.0
    call_user_func_array(__NAMESPACE__ .'Foo::test', array('Hannes'));
    
    // As of PHP 5.3.0
    call_user_func_array(array(__NAMESPACE__ .'Foo', 'test'), array('Philip'));
    
    ?>

    以上例程的输出类似于:

    Hello Hannes!
    Hello Philip!

    Example #3 把完整的函数作为回调传入call_user_func_array()

    <?php
    
    $func = function($arg1, $arg2) {
        return $arg1 * $arg2;
    };
    
    var_dump(call_user_func_array($func, array(2, 4))); /* As of PHP 5.3.0 */
    
    ?>

    以上例程会输出:

    int(8)

    Example #4 传引用

    <?php
    
    function mega(&$a){
        $a = 55;
        echo "function mega $a=$a
    ";
    }
    $bar = 77;
    call_user_func_array('mega',array(&$bar));
    echo "global $bar=$bar
    ";
    
    ?>

    以上例程会输出:

    function mega $a=55
    global $bar=55

    call_user_func

    (PHP 4, PHP 5, PHP 7)

    call_user_func — 把第一个参数作为回调函数调用

    说明

    mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )

    第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

    参数

    callback

    将被调用的回调函数(callable)。

    parameter

    0个或以上的参数,被传入回调函数。

    Note:

    请注意,传入call_user_func()的参数不能为引用传递。

    Example #1 call_user_func() 的参考例子

    <?php
    error_reporting(E_ALL);
    function increment(&$var)
    {
        $var++;
    }
    
    $a = 0;
    call_user_func('increment', $a);
    echo $a."
    ";
    
    call_user_func_array('increment', array(&$a)); // You can use this instead before PHP 5.3
    echo $a."
    ";
    ?>

    以上例程会输出:

    0
    1

    返回值

    返回回调函数的返回值。

    更新日志

    版本说明
    5.3.0 对面向对象里面的关键字的解析有所增强。在此之前,使用两个冒号来连接一个类和里面的一个方法,把它作为参数来作为回调函数的话,将会发出一个E_STRICT的警告,因为这个传入的参数被视为静态方法。

    范例

    Example #2 call_user_func() 的例子

    <?php
    function barber($type)
    {
        echo "You wanted a $type haircut, no problem
    ";
    }
    call_user_func('barber', "mushroom");
    call_user_func('barber', "shave");
    ?>

    以上例程会输出:

    You wanted a mushroom haircut, no problem
    You wanted a shave haircut, no problem

    Example #3 call_user_func() 命名空间的使用

    <?php
    
    namespace Foobar;
    
    class Foo {
        static public function test() {
            print "Hello world!
    ";
        }
    }
    
    call_user_func(__NAMESPACE__ .'Foo::test'); // As of PHP 5.3.0
    call_user_func(array(__NAMESPACE__ .'Foo', 'test')); // As of PHP 5.3.0
    
    ?>

    以上例程会输出:

    Hello world!
    Hello world!

    Example #4 用call_user_func()来调用一个类里面的方法

    <?php
    
    class myclass {
        static function say_hello()
        {
            echo "Hello!
    ";
        }
    }
    
    $classname = "myclass";
    
    call_user_func(array($classname, 'say_hello'));
    call_user_func($classname .'::say_hello'); // As of 5.2.3
    
    $myobject = new myclass();
    
    call_user_func(array($myobject, 'say_hello'));
    
    ?>

    以上例程会输出:

    Hello!
    Hello!
    Hello!

    Example #5 把完整的函数作为回调传入call_user_func()

    <?php
    call_user_func(function($arg) { print "[$arg]
    "; }, 'test'); /* As of PHP 5.3.0 */
    ?>

    以上例程会输出:

    [test]

    注释

    Note:

    在函数中注册有多个回调内容时(如使用 call_user_func() 与 call_user_func_array()),如在前一个回调中有未捕获的异常,其后的将不再被调用。

    create_function

    (PHP 4 >= 4.0.1, PHP 5, PHP 7)

    create_function — Create an anonymous (lambda-style) function

    说明

    string create_function ( string $args , string $code )

    从传递的参数创建一个匿名函数,并返回一个唯一的名称。

    警告
    此函数内部执行eval(),因此与eval()具有相同的安全性问题。 此外,它具有不良的性能和内存使用特性。
    如果您使用的是PHP 5.3.0或更新版本,则应使用本机匿名函数。

    参数

    通常这些参数将作为单引号分隔的字符串传递。 使用单引号字符串的原因是保护变量名不被解析,否则,如果使用双引号,则需要转义变量名,例如。$阿瓦尔。

    args

    函数参数。

    code

    功能码。

    返回值

    以字符串形式返回唯一的函数名称,或者返回错误的FALSE。

    范例

    Example #1 Creating an anonymous function with create_function()

    您可以使用此功能,(例如)从运行时收集的信息创建一个函数:

    <?php
    $newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
    echo "New anonymous function: $newfunc
    ";
    echo $newfunc(2, M_E) . "
    ";
    // outputs
    // New anonymous function: lambda_1
    // ln(2) + ln(2.718281828459) = 1.6931471805599
    ?>

    或者,可能有一般的处理函数可以将一组操作应用于参数列表:

    Example #2 Making a general processing function with create_function()

    <?php
    function process($var1, $var2, $farr)
    {
        foreach ($farr as $f) {
            echo $f($var1, $var2) . "
    ";
        }
    }
    
    // create a bunch of math functions
    $f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}';
    $f2 = "return "min(b^2+a, a^2,b) = ".min($a*$a+$b,$b*$b+$a);";
    $f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }';
    $farr = array(
        create_function('$x,$y', 'return "some trig: ".(sin($x) + $x*cos($y));'),
        create_function('$x,$y', 'return "a hypotenuse: ".sqrt($x*$x + $y*$y);'),
        create_function('$a,$b', $f1),
        create_function('$a,$b', $f2),
        create_function('$a,$b', $f3)
        );
    
    echo "
    Using the first array of anonymous functions
    ";
    echo "parameters: 2.3445, M_PI
    ";
    process(2.3445, M_PI, $farr);
    
    // now make a bunch of string processing functions
    $garr = array(
        create_function('$b,$a', 'if (strncmp($a, $b, 3) == 0) return "** "$a" '.
        'and "$b"
    ** Look the same to me! (looking at the first 3 chars)";'),
        create_function('$a,$b', '; return "CRCs: " . crc32($a) . ", ".crc32($b);'),
        create_function('$a,$b', '; return "similar(a,b) = " . similar_text($a, $b, &$p) . "($p%)";')
        );
    echo "
    Using the second array of anonymous functions
    ";
    process("Twas brilling and the slithy toves", "Twas the night", $garr);
    ?>

    以上例程会输出:

    Using the first array of anonymous functions
    parameters: 2.3445, M_PI
    some trig: -1.6291725057799
    a hypotenuse: 3.9199852871011
    b*a^2 = 4.8103313314525
    min(b^2+a, a^2,b) = 8.6382729035898
    ln(a)/b = 0.27122299212594
    
    Using the second array of anonymous functions
    ** "Twas the night" and "Twas brilling and the slithy toves"
    ** Look the same to me! (looking at the first 3 chars)
    CRCs: -725381282, 342550513
    similar(a,b) = 11(45.833333333333%)

    但是,对于lambda风格(匿名)函数来说,最常见的用法是创建回调函数,例如使用array_walk()或usort()

    Example #3 Using anonymous functions as callback functions

    <?php
    $av = array("the ", "a ", "that ", "this ");
    array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));
    print_r($av);
    ?>

    以上例程会输出:

    Array
    (
      [0] => the mango
      [1] => a mango
      [2] => that mango
      [3] => this mango
    )

    一串字符串从较短到较长的顺序排列

    <?php
    
    $sv = array("small", "larger", "a big string", "it is a string thing");
    print_r($sv);
    
    ?>

    以上例程会输出:

    Array
    (
      [0] => small
      [1] => larger
      [2] => a big string
      [3] => it is a string thing
    )

    将其从更长到更短的排序

    <?php
    
    usort($sv, create_function('$a,$b','return strlen($b) - strlen($a);'));
    print_r($sv);
    
    ?>

    以上例程会输出:

    Array
    (
      [0] => it is a string thing
      [1] => a big string
      [2] => larger
      [3] => small
    )

    forward_static_call_array

    (PHP 5 >= 5.3.0, PHP 7)

    forward_static_call_array — Call a static method and pass the arguments as array

    说明

    mixed forward_static_call_array ( callable $function , array $parameters )

    ....

    ....

    ....

    给个目录

    函数处理 函数

  • 相关阅读:
    【总结】Metasploit自动攻击模块
    【实战】SSL和TLS漏洞验证
    【研究】Struts2-052漏洞
    【研究】Struts2-048漏洞
    【研究】XML外部实体注入(XXE)
    【研究】CVE-2017-11882-Office远程代码执行漏洞复现
    Excel----004分类汇总与数据有效性
    Excel----003排序与筛选
    Excel----002.单元格美化、数字格式设置、分列工具
    Execl----001.Excel基础操作
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/6958351.html
Copyright © 2011-2022 走看看