LoginSignup
0
0

More than 3 years have passed since last update.

関数の中で関数を出力

Posted at

関数の中で関数を出力

今回は勉強を進めているときに、疑問に思った
関数内での関数や変数の記述の仕方について発見があったので
書き留めておきます

まずびっくりしたのが関数内で別の関数は出力できる!ということ

<?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

用途は少なそうだが頭に入れておいて損はなさそうです。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0