> 백엔드 개발 > PHP 튜토리얼 > PHP lambda 与 闭包

PHP lambda 与 闭包

WBOY
풀어 주다: 2016-06-23 14:33:30
원래의
1054명이 탐색했습니다.

lambda、

我自己的理解,lambda就是把方法名保存到一个变量里面去调用方法,典型的create_function所返回的就是lambda方法。

1 $newfunc = create_function('$a', 'echo "what u put in is " . $a;');2 $newfunc('aaaaa');
로그인 후 복사

更简单地可以自己去写lambda方法的名称,然后用以这种形式去调用。

1 function dump($a){2      var_dump($a);3 }4 $a = 'dump';5 $a('321');
로그인 후 복사

闭包、

这里单单从语法上说一下PHP的闭包,考虑下面的代码:

 1 class ClosureTest{ 2      public $multiplier; 3      public function __construct($multilier){ 4           $this->multiplier= $multilier; 5      } 6   7      public function getClosure(){ 8           $self = $this; 9           return function($number) use($self) {10                return $number * $self->multiplier;11           };12      }13 }14 15 $test = new ClosureTest(10);16 $x = $test->getClosure();17 echo $x(8);18 $test->multiplier= 11;19 echo $x(8);
로그인 후 복사

 

最后结果为:8088.

必须用到use向闭包中传值,否则在调用时将提示变量未被定义的Notice。

闭包无法直接传递$this指针,所以这里先将$this保存在了$self中。

还有一点代码中没有体现出来,通过use传类成员到闭包中必须通过引用传递,否则在后来修改改成员的值后比包中的值不会被改变。

 

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿