一尘不染

PHP 5.4-'关闭$ this支持'

php

我看到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”,他们更像是您可以弄乱的成员。

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


阅读 277

收藏
2020-05-29

共1个答案

一尘不染

这已经为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
2020-05-29