2010.10.30 Saturday | 19:45

  PHP 5.3.0 以降の無名関数 プログラマ

借りている「さくらインターネット」ではまだ 5.3.0 は使えないみたいですが、
ローカルの 5.3.0 で動かしてみると気持ち良く動いたのです。

なんだか JavaScript 書いてるみたいで。

特に複雑な変数を明示する為の {} が役に立ってますねぇーー

5.3.0 での違いをはっきり認識したのは今回初めてだったのですが、
そんなにいちいちドキュメントに目を通すわけでも無く。ただ、必ず
さくらインターネットにアップして実行を確かめるのが常なので、
サーバーで動かなくって、「あれれれれ」

今後はもっと気を付けましょう。
<?
// **********************************************************
// n 桁の前ゼロ文字列を作成するには
// 以下で簡単に作成できますが、
// **********************************************************
$a = sprintf("%05d", 1);
print "$a<br>";

// **********************************************************
// どんな言語でもたぶんある関数(メソッド)を使って行うには
// **********************************************************

// 1) n 桁の 0 を目的の文字列の前に連結する

$a = "00000" . 1;

// 2) 全体の長さを取得する

$len = strlen($a);

// 3) 全体の長さ - 欲しい長さを開始位置とする

$start = $len - 5;

// 4) その位置から欲しい長さぶん切り取る

$x = substr( $a, $start, 5 );

print "$x<br>";

// **********************************************************
// PHP 5.3.0 より実行可能な無名関数
// **********************************************************
$f = function( $target, $n ) {

	$target = str_repeat("0",$n) . $target;
	$len = strlen($target);
	$start = $len - $n;
	$target = substr( $target, $start, $n );
	return $target;

};

print "{$f(1,5)}<br>";
print "{$f("AA",5)}<br>";
print "{$f("あA",5)}<br>";
print "{$f(1234,5)}<br>";
print "{$f(12345,5)}<br>";

?>

関連する記事

PHP : 前ゼロ文字列作成と右から必要な長さ文字列を取得する処理