- 2010-10-09 (土) 15:18
- PHP
via. スクリプト言語間における「lexical closure」の違い、それともプログラムの違い? – karasuyamatenguの日記
PHPも5.3からクロージャがあります。クロージャの指定の仕方によって挙動が異なりますが、PHPで書くと以下のようになります。
ループでiを0から4まで回す
ループブロック内で:
iを埋め込んだlexical variable、’localvar’を定義。
localvarを参照したclosureをリストに追加。
5つのclosureの値をプリントスクリプト言語間における「lexical closure」の違い、それともプログラムの違い? – karasuyamatenguの日記
各クロージャの$localvarが独立しているパターン。
foo0 foo1 foo2 foo3 foo4
各クロージャで$localvarを共有しているパターン。(use で指定する変数が参照渡しになっている。)
foo4 foo4 foo4 foo4 foo4
- Newer: Facebookをスーパーマリオに例えると
- Older: Lithiumのフィルタシステム
コメント (Close):2
- ha 10-10-09 (土) 23:42
-
どちらの貼り付けられたコードが同じに見えます。
- shinbara 10-10-11 (月) 11:56
-
haさん:
5 行目が違ってたりします。% diff -u a.php b.php
— a.php 2010-10-11 11:54:28.000000000 +0900
+++ b.php 2010-10-11 11:54:40.000000000 +0900
@@ -2,7 +2,7 @@
$closures = array();
for ($i = 0 ; $i <= 4 ; $i++) { $localvar = 'foo'.$i; - $closures[] = function () use ($localvar) { return $localvar; }; + $closures[] = function () use (&$localvar) { return $localvar; }; } foreach ($closures as $c) { echo $c().PHP_EOL;
トラックバック:0
- このエントリーのトラックバックURL
- /blog/2010/10/lexical_closure_php.html/trackback
- Listed below are links to weblogs that reference
- スクリプト言語間における「lexical closure」の違い – PHPの場合 from Shin x blog