DEVELOPERS BLOGデベロッパーズブログ
- HOME >
 - 加藤 正人のデベロッパーズブログ >
 - PHP 5.3 のクロージャの続き
 
加藤 正人のデベロッパーズブログ
- 氏名
 - 加藤 正人
 
- 役職
 - 多分SE
 
- 血液型
 - 秘密
 
- 出没
 - 美味しいもののあるところ
 
- 特色
 - タヒチ大好き。ちょいメタボ。
 
- 2020/12/15
 - CakePHP3 のリダイレクトがうまく行かない例
 - 2020/11/12
 - Apache Bench
 - 2020/10/05
 - PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)
 
以前「無名関数からの外部変数参照について」として「クロージャ間で値渡し変数がうまく共有されない」という記事を書いたが、テスト方法に問題があることに気付いた。
その時のコードでは 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 $
関連エントリー
- 2019/04/03
 - PHP で HTML を処理したい
 
- 2018/09/04
 - MySQL にタイムゾーンを追加する
 
- 2015/11/07
 - JavaScript でのクロージャからの外部変数参照
 
- 2015/10/24
 - CsvLoader ビヘイビアを使って CSV を一発でロードする Cake Shell
 
- 2015/08/08
 - 無名関数からの外部変数参照について
 
- 2015/08/01
 - CKFinder v3.x で躓いた点
 














