• 技术文章 >后端开发 >PHP问题

    在PHP中如何为匿名函数指定this

    逆旅行人逆旅行人2021-04-07 16:51:49转载137

    2021040616324228213.jpg

    关于闭包匿名函数,在JS中有个很典型的问题就是要给它绑定一个 this 作用域。其实这个问题在PHP中也是存在的,比如下面这段代码:

    $func = function($say){
        echo $this->name, ':', $say, PHP_EOL;
    };
    $func('good'); // Fatal error: Uncaught Error: Using $this when not in object context

    在这个匿名函数中,我们使用了 $this->name 来获取当前作用域下的 $name 属性,可是,这个 $this 是谁呢?我们并没有定义它,所以这里会直接报错。错误信息是:使用了 $this 但是没有对象上下文,也就是说没有指定 $this 引用的作用域。

    1.bindTo() 方法绑定 $this

    $func = $func->bindTo($lily, 'Lily');
    // $func = $func->bindTo($lily, Lily::class);
    // $func = $func->bindTo($lily, $lily);
    $func1('cool');

    这回就可以正常输出了。 bindTo() 方法是复制一个当前的闭包对象,然后给它绑定 $this 作用域和类作用域。

    如果不给这个参数,那么我们就不能访问这个 private$name 属性了:

    $func1 = $func->bindTo($lily);
    $func1('cool2'); // Fatal error: Uncaught Error: Cannot access private property Lily::$name

    2.call() 方法绑定 $this

    $func->call($lily, 'well'); // Lily:well

    推荐:2021年PHP面试题大汇总(收藏)》《php视频教程

    以上就是在PHP中如何为匿名函数指定this的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:imooc,如有侵犯,请联系admin@php.cn删除
    专题推荐:匿名函数 this PHP
    上一篇:php错误日志怎么看 下一篇:如何利用PHP来输出一个杨辉三角
    第15期线上培训班

    相关文章推荐

    • PHP 核心特性之匿名函数• 关于php中匿名函数与回调函数的详解• php匿名函数的使用• PHP让人不知道的匿名函数的几种写法(附代码)• PHP使用Closure创建匿名函数的方法介绍

    全部评论我要评论

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

    PHP中文网