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以前で使える方法ってのがあるわけで・・・。