DEVELOPERS BLOGデベロッパーズブログ

  1. HOME > 
  2. 加藤 正人のデベロッパーズブログ > 
  3. PHP 5.3 のクロージャの続き

加藤 正人のデベロッパーズブログ

加藤 正人

氏名
加藤 正人
役職
多分SE
血液型
秘密
出没
美味しいもののあるところ
特色
タヒチ大好き。ちょいメタボ。

加藤 正人

2015/12/12

PHP 5.3 のクロージャの続き

 

以前「無名関数からの外部変数参照について」として「クロージャ間で値渡し変数がうまく共有されない」という記事を書いたが、テスト方法に問題があることに気付いた。

その時のコードでは test($x) で2回に分けてクロージャを生成しているため、$test1 に割り当てられる test() 内変数 $local_var と $test2 に割り当てられる $local_var とは異なるのは当然だった。

JavaScript でのクロージャからの外部変数参照」と同等のコードでテストしたところ、クロージャ間で正しく共有されていることが確認できた。

ほぼ同等の動作をするような下記のコードを作ってみた。

このコードを実行すると、$f1 に割り当てられたクロージャと $f2 に割り当てられたクロージャ間で $json を共有し、両者の区別なく値が加算されていくことがわかる。

実際に実行した結果はこちら。

$ php test.php
f1 => 2
f1 => 3
f1 => 4
f2 => 5
f2 => 6
f2 => 7
f1 => 8
f1 => 9
f1 => 10
$
関連タグ: 無名関数  Closure  PHP  5.x  外部変数参照 

関連エントリー