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

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 作用域和类作用域。

 $lily 参数是一个 object $newthis 参数,也就是给这个复制出来的匿名函数指定 $this 。

立即学习“PHP免费学习笔记(深入)”;

 ‘Lily’ 则是绑定一个新的 类作用域 ,它代表一个类型、决定在这个匿名函数中能够调用哪些 私有 和 受保护 的方法

如果不给这个参数,那么我们就不能访问这个 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的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2516913.html

(0)
上一篇 2025年3月5日 15:57:36
下一篇 2025年2月23日 19:49:12

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何利用PHP来输出一个杨辉三角

        杨辉三角以正整数构成,数字左右对称,每行由1开始逐渐变大,然后变小,回到1;杨辉三角的每一个数是它的左上方和右上方的数的和,我们可以将其理解为一个二维数组,通过两次循环来输出数据。 1、什么是杨辉三角?     杨辉三角是二项式系数…

    2025年3月5日
    200
  • php怎么自动跳转到指定页面

    在php中,可以利用header()函数来自动跳转到指定页面;只需要在PHP文档的最开头添加“header(“location:指定页面的地址”)”或“header(‘Refresh:时间数值,Url=指…

    2025年3月5日
    200
  • PHP如何进行模糊查询

    模糊查询的方法:1、使用SQL匹配模式,操作符使用“LIKE”或“NOT LIKE”,匹配时,不区分大小写;2、使用正则表达式匹配模式,操作符使用“REGEXP”或“NOT REGEXP”,正则表达式可出现在匹配字段的任意位置。 本教程操作…

    2025年3月5日 编程技术
    200
  • php时间如何转化为星期几

    转换方法:1、使用date()和“strtotime(指定日期)”将日期转换成表示星期的数字;2、定义“array(“日”,”一”,”二”,”三&#8221…

    2025年3月5日
    200
  • PHP中连接符大于号、等号大于号的意思

      在学习php中,遇到了->和=>这两个符号。   刚遇到这两个符号的时候不知道它们代表的含义,在经过百度后才发这两个符号的秘密。  下面来看一下在PHP中->的秘密,如下代码。 speed+=10; } }$car =…

    2025年3月5日
    200
  • phpstudy怎么设置php版本

    方法:1、打开phpstudy界面,找到界面上的“切换版本”按钮,并点击;2、选择需要的php版本以及服务器类型(Apach、Nginx或IIS);3、phpstudy会自动重启,当指示灯都为绿色的时候,表示php版本切换成功。 本教程操作…

    2025年3月5日 编程技术
    200
  • PHP中如何利用pathinfo()获取路径数组

        在php的使用过程中,文件的路径是比较常用的,那么如何将文件的路径信息放入数组,以便更好地使用呢?我们主要利用了pathinfo()这个函数。 pathinfo的语法: pathinfo ( string $path , [int …

    2025年3月5日
    200
  • PHP中如何千位分隔符格式化一个数字

        在日常使用数字的过程中,总有一些特殊的场景需要以特定的形式显示数字,本文主要讲述了如何利用number_format ()函数,使得数字以千位分隔符的方式显示。 1.number_format ()语法 number_format(…

    2025年3月5日
    200
  • PHP中如何使用count()函数

        php经常需要计算数组中的单元数目,或对象中的属性个数,这时正确地使用count()函数,便能够迅速地解决这样的麻烦。 count()语法 count  ( mixed $arr , [int $mode]) 登录后复制 $arr:…

    2025年3月5日
    200
  • PHP中如何去除字符串首尾多余字符

             字符串是php获取表单元素的值时常见的格式,由于用户在日常输入数据时,可能会产生多余的字符,例如回车符、换行符、制表符、普通空格符等等,如何解决这些问题,trim()便有了用武之地。         首先来看看trim()…

    2025年3月5日
    100

发表回复

登录后才能评论