zoukankan      html  css  js  c++  java
  • php 回调函数

    在PHP5.4以后加入了类型,指的就是PHP中可以用作回调函数的函数名称。
    可能大家最常使用回调函数的地方,就是在usort()中了。比如二维数组的自定义排序:
    $stars = array(
        array('name' => 'psy', 'style' => 9, 'funny' => 8),
        array('name' => 'hkt', 'style' => 0, 'funny' => 9),
        array('name' => 'ladygaga', 'style' => 8, 'funny' => 7),
    );
     
    function cmp_style($a, $b){
        return $a['style'] < $b['style'];
    }
     
    usort($stars, 'cmp_style');  // cmp_style是函数名,它就是一个回调函数
    var_dump($stars)
     
    /* Output:
    array(3) {
      [0]=>
      array(3) {
        ["name"]=>
        string(3) "psy"
        ["style"]=>
        int(9)
        ["funny"]=>
        int(8)
      }
      [1]=>
      array(3) {
        ["name"]=>
        string(8) "ladygaga"
        ["style"]=>
        int(8)
        ["funny"]=>
        int(7)
      }
      [2]=>
      array(3) {
        ["name"]=>
        string(3) "hkt"
        ["style"]=>
        int(0)
        ["funny"]=>
        int(9)
      }
    }
    */

    可见,在使用回调函数的时候,是将这个函数的函数名字符串作为参数来传递的。
    PHP中可以使用用户自定义的function和PHP内置的function来做回调函数。
    其实在PHP中,回调函数不只是简单的function,还可以用类的成员函数、类的静态函数以及对象的方法来做回调函数。
    比如:
    class Star_sort { 
        static function cmp_style($a, $b){
            return $a['style'] < $b['style'];
        }
    }
    // 1. Static class method call
    usort($stars, array('Star_sort', 'cmp_style')); // 没错, array('类名', '成员函数名');
    var_dump($stars);
     
    // 2. Object method call
    $obj = new Star_sort();
    usort($stars, array($obj, 'cmp_style'));
    var_dump($stars);
     
    // 3. Static class method call
    usort($stars, array('Star_sort::cmp_style'));
    var_dump($stars);
     
    // 4. Relative static class method call
    class Star_rsort extends Star_sort{
        static function cmp_style($a, $b){
            return $a['style'] > $b['style'];
        }
    }
    usort($stars, array('Star_rsort', 'parent::cmp_style'));
    var_dump($stars);
    // 都会有和上面一样的输出
     
    usort($stars, array('Star_rsort', 'cmp_style')); // 会输出反向的排序
    var_dump($stars);

    除此之外,回调函数还可以在调用的时候,利用create_function()来即时创建一个匿名函数。比如:
    usort($stars, create_function('$a, $b', 'return $a[\'style\'] < $b[\'style\'];'));
    var_dump($stars);

    平时我们常用回调函数的地方还有array_walk(), call_user_func()等等,用好了可以大大节省开发时间和缩短代码长度,同时就提高了工作效率和减少bug了。

    原文链接:http://www.fancycedar.info/2012/11/php-callbacks/

  • 相关阅读:
    MSDN Silverlight翻译Controls
    MSDN Silverlight翻译MSDN Siverlight
    树状数组
    MSDN Silverlight翻译Application and Programming Models
    MSDN Silverlight翻译XAML
    布隆过滤器(Bloom Filter)的原理和实现
    Opening a Modal Dialog shows a horizontal scroll bar
    Jquery 选择器性能问题
    SQL将Excel文件导入数据库
    C# 无法读取Excel中的数据单元格。有数据,但是读出来全是空值。
  • 原文地址:https://www.cnblogs.com/gaogaoxingxing/p/5367346.html
Copyright © 2011-2022 走看看