関数の中で関数を出力
今回は勉強を進めているときに、疑問に思った
関数内での関数や変数の記述の仕方について発見があったので
書き留めておきます
まずびっくりしたのが関数内で別の関数は出力できる!ということ
<?php
$n = 2;
function test($n) {
return $n**2;
}
function hoge($n) {
if(test($n) < 100) { //関数外定義
echo "100以下" . PHP_EOL;
}
echo "OK!!" . PHP_EOL;
}
hoge($n);
//100以下
//OK!!
過去の学習から関数内で定義した変数は関数内でしか使えない
関数外で定義した変数を使いたければ引数で渡せ
これを学んだばかりの私は先入観から
「関数においても同じだろう」
このような安易な考えから
<?php
$n = 2;
function test($n) {
return $n**2;
}
$fuga = test($n);//わざわざ変数に直す
function hoge($fuga) {
if(test($fuga) < 100) {
echo "100以下" . PHP_EOL;
}
echo "OK!!" . PHP_EOL;
}
hoge($n);
//100以下
//OK!!
という風にかなり遠回りな記述をしていました。
そしてさらに驚いたのは、
<?php
$n = 2;
function hoge($n) {
function test($n) {//関数内で関数定義
echo "2乗します" . PHP_EOL;
return $n**2;
}
if(test($n) < 100) {
echo "100以下" . PHP_EOL;
}
echo "OK!!" . PHP_EOL;
}
hoge($n);
test($n);//関数外で出力
// 2乗します
// 100以下
// OK!!
// 2乗します
関数の中で定義した別の関数が、関数の外で出力できることです。
もはや{}の囲いから外へ脱走しまくっていますw
用途は少なそうだが頭に入れておいて損はなさそうです。