破棄されたブログ

このブログは破棄されました。

PHP のクロージャ

クロージャといえば JS !!!!! ってくらい JS のクロージャしか知らんかったので、 PHP のクロージャで JS みたいなことできるのかやってみた。

まずは、JavaScript のコード。当たり前に、期待通りの挙動。

function getFn(arg) {
	var inner_variable = arg;
	return function() {
		return inner_variable;
	}
}

fn = getFn('hoge');
console.log(fn()); // hoge

次は PHP のコード。ある意味予想通り。クロージャの内部から外部の変数を参照できない。
そもそも PHP で JS と同様の挙動を期待しないといけない状況はない。普通にクラス使えば変数なりメソッドなりを隠蔽できるから。クロージャのがコンパクトに書けるとか動的に生成しやすそうとかそういうのもあるけど、そんなことしたいときは PHP 使わなきゃいいだけなので、特に困ることもなさそ。

<?php
function getFn($arg) {
	$inner_variable = $arg;
	return function() {
		return $inner_variable;
	};
}

$fn = getFn('hoge');
var_dump($fn()); // NULL
?>

あ、 Perl でも書いてみようと思ったんだけど、 Perl のクロージャの使い方がよくわからんかった。パッケージだかモジュールだかを使わんといけないのかな。

広告を非表示にする