関数の中に関数がある?
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);
}
これもだいぶ読みやすくなりました。
関連
-
[解決済み] 入力ファイルが指定されていない
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] JavaScriptの変数のスコープとは何ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] PHPスクリプトからJSONを返す
-
[解決済み] JavaScriptの関数をパラメータとして渡す
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】JavaScriptの関数式の前にプラス記号がある場合
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Fatal error: メンバ関数bind_param()のbooleanに対する呼び出し [重複] [重複
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】++と*+の意味は何ですか?
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み】PDOException SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリがありません。
-
[解決済み】SSLピア証明書またはSSHリモートキーがOKでなかった
-
[解決済み】Netbeans 7.4 for PHPで「スーパーグローバルな$_POST配列に直接アクセスしないでください」という警告が発生する。
-
[解決済み] PHP - ストリームを開くのに失敗しました : そのようなファイルまたはディレクトリがありません。
-
[解決済み】mysqli::query(): mysqli をフェッチできない