当前位置: 首页 > 面试题库 >

PHP 5.4-'关闭$ this支持'

王弘和
2023-03-14
问题内容

我看到PHP 5.4的新计划功能是:特征,数组解引用,JsonSerializable接口和称为’ closure $this support

http://en.wikipedia.org/wiki/Php#Release_history

尽管其他人要么立即清楚(JsonSerialiable,数组取消引用),要么我查看了具体细节(特征),但我不确定什么是“ closure $ this
support”。我一直在搜寻它或在php.net上找到关于它的任何内容均未成功

有人知道这应该是什么吗?

如果我不得不猜测,那就意味着这样:

$a = 10; $b = 'strrrring';
//'old' way, PHP 5.3.x
$myClosure = function($x) use($a,$b)
             {
                 if (strlen($x) <= $a) return $x;
                 else return $b;
             };

//'new' way with closure $this for PHP 5.4
$myNewClosure = function($x) use($a as $lengthCap,$b as $alternative)
                 {
                     if(strlen($x) <=  $this->lengthCap)) return $x;
                     else 
                     {
                         $this->lengthCap++;  //lengthcap is incremented for next time around
                         return $this->alternative;
                     }
                 };

重要性(即使该示例是微不足道的)是,过去一旦构造了闭包,绑定的“使用”变量就被固定了。有了“ closure $ this
support”,他们更像是您可以弄乱的成员。

这听起来是否正确和/或接近和/或合理?有人知道“关闭此支持”意味着什么吗?


问题答案:

这已经为PHP 5.3计划了,但是

对于PHP 5.3,已删除对Closures的支持,因为无法达成共识,如何以理智的方式实现它。该RFC描述了在下一个PHP版本中可以采用的可能方法。

这确实意味着您可以引用对象实例(实时演示)

<?php
class A {
  private $value = 1;
  public function getClosure() 
  {
    return function() { return $this->value; };
  }
}

$a = new A;
$fn = $a->getClosure();
echo $fn(); // 1


 类似资料:
  • 涵义 this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 前一章已经提到,this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。 简单说,this就是属性或方法“当前”所在的对象。 this.property 上面代码中,this就代表property属性当前所在

  • 在 C# 中,可以使用 this 关键字来表示当前对象,日常开发中我们可以使用 this 关键字来访问类中的成员属性以及函数。不仅如此 this 关键字还有一些其它的用法,下面就通过一些示例来分别演示一下。 1) 使用 this 表示当前类的对象 运行结果如下: 小牛知识库 https://www.xnip.cn/ 2) 使用 this 关键字串联构造函数 运行结果如下: 无参构造函数 小牛知识库

  • 主要内容:this.属性名,this.方法名,this( )访问构造方法this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。 下面我们根据示例分别讲解 this 关键字的作用。 this.属性名 大部分时候,普通方法访问其他方法、成员变量时无须使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀

  • 闭包定义 我们可以使用闭包的方式定义一些特殊需求的路由,而不需要执行控制器的操作方法了,例如: Route::get('hello', function () { return 'hello,world!'; }); 参数传递 闭包定义的时候支持参数传递,例如: Route::get('hello/:name', function ($name) { return 'Hello,'

  • 本文向大家介绍Java微信支付之关闭订单,包括了Java微信支付之关闭订单的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java微信支付之关闭订单的具体代码,供大家参考,具体内容如下 官方文档 一、应用场景 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付 系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口 注意:订单生成后不能马

  • Github Copilot支持哪些编程语言? 我已经看到了从已经被接受到技术预览的帐户的演示,但是所展示的大多数示例都是Javascript和Python。 副驾驶支持Java和Kotlin编程语言吗? 对于像ELM这样的重点更突出的语言如何?