DEVELOPERS BLOGデベロッパーズブログ
以前「無名関数からの外部変数参照について」として「クロージャ間で値渡し変数がうまく共有されない」という記事を書いたが、テスト方法に問題があることに気付いた。
その時のコードでは 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 $
この記事は加藤 正人さんが書いています!
- 氏名
- 加藤 正人
- 役職
- 多分SE
- 血液型
- 秘密
- 出没
- 美味しいもののあるところ
- 特色
- タヒチ大好き。ちょいメタボ。
- 2020/12/15
- CakePHP3 のリダイレクトがうまく行かない例
- 2020/11/12
- Apache Bench
- 2020/10/05
- PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)
2020/12/15
2020/11/12
2020/10/05
2020/09/11
2020/08/03