Home > PHP > スクリプト言語間における「lexical closure」の違い – PHPの場合

スクリプト言語間における「lexical closure」の違い – PHPの場合

  • 2010-10-09 (土) 15:18
  • PHP
この記事の所要時間: 045

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

Pocket

follow us in feedly

コメント (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

Home > PHP > スクリプト言語間における「lexical closure」の違い – PHPの場合

検索
フィード
メタ情報

Return to page top