1. ホーム
  2. php

関数の中に関数がある?

2023-11-29 01:02:39

質問内容

このコードは56のように結果を出します。

function x ($y) {
    function y ($z) {
        return ($z*2);
    }

    return($y+3);
}

$y = 4;
$y = x($y)*y($y);
echo $y;

内部で何が起こっているのか、何か心当たりはありませんか?私は混乱しています。

どのように解決するのですか?

Xは(値+3)を返し、Yは(値*2)を返します。

値が4とすると、これは (4+3) * (4*2) = 7 * 8 = 56 .

関数はスコープに制限がない(つまり、関数定義を安全に「ネスト」できる)のですが、この特定の例はエラーが発生しやすいのです。

1) y() を呼び出す前に x() を呼び出す前に、関数 y() が実際に定義されるのは x() が一度実行されるまで、実際に定義されることはありません。

2) 呼び出し x() を2回呼ぶと、PHPは関数 y() を再読込することになり、致命的なエラーになります。

致命的なエラーです。y()を再宣言できません。

両方への解決策は、コードを分割して、両方の関数が互いに独立して宣言されるようにすることでしょう。

function x ($y) 
{
  return($y+3);
}

function y ($z)
{
  return ($z*2);
}

これもだいぶ読みやすくなりました。