• 技术文章 >后端开发 >php教程

    php什么时候使用闭包

    清浅清浅2020-09-16 14:38:39原创2241

    php中闭包的使用场景有:1、在动态调用静态类时;2、在callback函数中使用;3、赋值给一个普通的变量;4、使用use从父域中继承;5、传递参数时等等。

    php中的闭包的使用场景有:在动态调用静态类时,在callback函数中使用,赋值给一个普通的变量,使用use从父域中继承以及传递参数时

    闭包函数

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

    使用场景

    动态调用静态类的时候

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

    在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
    ?>

    赋值给一个普通的变量

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

    使用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();

    传递参数

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

    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();

    函数中的调用

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

    以上就是php什么时候使用闭包的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php闭包
    上一篇:php的工作前景怎么样 下一篇:学php之前需要会什么
    大前端线上培训班

    相关文章推荐

    • PHP闭包函数的含义• PHP闭包(Closure)的介绍• PHP闭包的详细介绍(附代码)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网