PHPで無名関数っぽく・・・orz(create_functionを楽にしたいだけなのに)
篠原 隆司
PHPでも、無名関数がーーーって言っても・・・。
PHP5.3.0以降・・・。
レンタルサーバで、5.3.0以上使えるとこってあるのかな?
ってか、あったとしても意味ない。
できるだけ多くの場所で使えるようにしておきたいし。
ってことで、ちょいと作ってみました。
基本的に、create_function()だけど。
みなさん、create_function()つかってますか?
めんどくさくないですか?
何が面倒って、全てテキストで書かなきゃ。
ほんの少し複雑・・・というか、長めのコード書いたら、それ全部、シングルクォートで囲ってさ。。
面倒、面倒。
可読性落ち落ちだし。
そんなわけでして・・・
とりあえず、「createFunction」でもなんでもいいですので、格納するディレクトリをどこか決めます。
で、define()しておきます。
<?php define('PATH_CREATE_FUNCTION', '..../createFunction/');
「getCreateFunction」って名前のfunction()にしてみました。
<?php /* * create_function */ function getCreateFunction($funcName){ $f = file_get_contents(PATH_CREATE_FUNCTION . $funcName . '.php'); return create_function( substr($f, 0, strpos($f, "\n")) , substr($f, strpos($f, "\n") + 1) ); }
..../createFunction/addition.php
とりあえずサンプルとして、PATH_CREATE_FUNCTION で定義したフォルダに、「addition.php」を作ってみます。
ここで、ちょっとルールがあります。
1行目に、引数として使う変数を羅列します。
function example($a, $b, $c){ echo ($a . $b . $c); }
ってあったとしたら、「$a, $b, $c」の部分を書きます。
1行目に、です。「<php」とかいらないです。
2行目以降に、処理内容を書いていきます。
echo ($a . $b . $c);
の部分です。
処理内容は何行になってもOKです。
で、サンプルとして「addition.php」を次のようにしてみました。
$number1, $number2
if (ctype_digit($number1) && ctype_digit($number2)){
return $number1 + $number2;
}
reutrn '数字じゃないよ!';
利用してみます。
<?php // create_function $func = getCreateFunction('addition'); // 利用してみる。 echo $func(10, 15); // ↑の出力は、「25」 echo $func(10, 'abc'); // ↑の出力は、「数字じゃないよ!」
シングルクォートで囲まなくていい方法って、file_get_contents()以外にないかなー。
ヒアドキュメントも変数展開されるし、やっとNowdocって言っても、この記事の趣旨として、5.3以前で使える方法ってのがあるわけで・・・。