変数の初期化に即時関数を利用する

小ネタ

方法

初期化だけではありませんが、右辺に関数を使って配列を初期化したい、という場合があります。

普通の配列の初期化は例えば以下の通りです。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$arr = [11,12,13,14,15]; // [0]=>11,[1]=>12,[2]=>13,[3]=>14,[4]=>15
$arr = range(11,15); // 上と同じ
//キーと値を同じにしたいとき
$arr = array_combine(range(11,15) , range(11,15)); // [11]=>11,[12]=>12,[13]=>13,[14]=>14,[15]=>15
$arr = [11,12,13,14,15]; // [0]=>11,[1]=>12,[2]=>13,[3]=>14,[4]=>15 $arr = range(11,15); // 上と同じ //キーと値を同じにしたいとき $arr = array_combine(range(11,15) , range(11,15)); // [11]=>11,[12]=>12,[13]=>13,[14]=>14,[15]=>15
$arr = [11,12,13,14,15]; // [0]=>11,[1]=>12,[2]=>13,[3]=>14,[4]=>15
$arr = range(11,15); // 上と同じ
//キーと値を同じにしたいとき
$arr = array_combine(range(11,15) , range(11,15)); // [11]=>11,[12]=>12,[13]=>13,[14]=>14,[15]=>15

しかしもっと複雑なマクロ的な用途で数値範囲等を作り出して変数(や定数)に代入したいことがあります。その場合、関数を別に作成して代入するかもしれません。しかし、1回限りの代入の場合、わざわざ関数を定義するのは無駄になります。その場合、即時関数を使えます。Javascript に慣れている方は見慣れた形です。

以下は単純すぎますが、記述方法のサンプルとして掲載しています。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// php7.0以降の場合
$a =
(function(){
$arr = [];
for($i=11;$i<=15;$i++){
$arr[$i]=$i;
}
return $arr;
})();
// [11]=>11,[12]=>12,[13]=>13,[14]=>14,[15]=>15
// php7.0以降の場合 $a = (function(){ $arr = []; for($i=11;$i<=15;$i++){ $arr[$i]=$i; } return $arr; })(); // [11]=>11,[12]=>12,[13]=>13,[14]=>14,[15]=>15
// php7.0以降の場合
$a =
(function(){
    $arr = [];
    for($i=11;$i<=15;$i++){
        $arr[$i]=$i;
    }
    return $arr;
})();
// [11]=>11,[12]=>12,[13]=>13,[14]=>14,[15]=>15

内側の関数に引数を渡す場合は、以下のようにします。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// php7.0以降の場合
$max = 12;
$a =
(function(){
$arr = [$max];
for($i=11;$i<=$max;$i++){
$arr[$i]=$i;
}
return $arr;
})(10);
// php7.0以降の場合 $max = 12; $a = (function(){ $arr = [$max]; for($i=11;$i<=$max;$i++){ $arr[$i]=$i; } return $arr; })(10);
// php7.0以降の場合
$max = 12;
$a =
(function(){
    $arr = [$max];
    for($i=11;$i<=$max;$i++){
        $arr[$i]=$i;
    }
    return $arr;
})(10);

感想

他の言語でできる便利なことは、別の言語仕様にも取り入れられていくので、自分があまり使わない言語でも多少かじっておくと、知見が広がりますね。

タイトルとURLをコピーしました