php:関数に変数をバインドしたい
2008年2月2日 (土曜日) - 3:38:00 by decama
prototype.jsを使うようになって、bindがとても便利なことに気づかされたんだけれども、これと同様のことをphpでやろうと思った時に、どうすればいいのか考えなきゃならなくなった。
Smartyが使えるかどうかわからないサーバに、テンプレートを使わなきゃいけないような実装をしなければならなかったので、
preg_replace_callbackを使って変数をパースさせようとしてみた。コールバック関数側でアサイン用の配列を参照してパースすればいいじゃん、と思って組んでみた。
ところが、コールバック関数には、正規表現にマッチした文字列が配列で投げられるだけで、他に参照用の配列を渡せない。
コールバック関数側で、参照用配列をglobalでアクセスすればいいんだけど、これだと美しくない。
で、こうしてみた。
PHP:
-
class Binder
-
{
-
var $bind;
-
-
function __construct($arg = NULL)
-
{
-
}
-
-
function __call($foo, $args)
-
{
-
}
-
}
コールバック関数が呼ばれる前に、
PHP:
-
$bind = new Binder($assigned);
みたいにバインドさせる変数を事前に渡しておいてから、コールバック関数を
PHP:
で呼び出せば、バインド用に渡しておいた変数を一緒に投げてくれる。
無理やりな解決策だったけど、これはもうちょっと考えてあげれば面白いかもしれないのでとりあえずのメモ。