[解決済み] PHPのネストされた関数は何のためにあるのですか?
2023-05-14 19:30:15
質問
JavaScriptでは、ネストされた関数が非常に便利です:クロージャ、プライベートメソッド、その他。
PHPのネストされた関数は何のためにあるのでしょうか?誰かがそれを使い、何のために?
これは私が行った小さな調査です。
<?php
function outer( $msg ) {
function inner( $msg ) {
echo 'inner: '.$msg.' ';
}
echo 'outer: '.$msg.' ';
inner( $msg );
}
inner( 'test1' ); // Fatal error: Call to undefined function inner()
outer( 'test2' ); // outer: test2 inner: test2
inner( 'test3' ); // inner: test3
outer( 'test4' ); // Fatal error: Cannot redeclare inner()
どのように解決するのですか?
基本的にはありません。私はいつもパーサーの副作用として扱っています。
Eran Galperinは、これらの関数が何らかの形でプライベートなものであると考えるのは間違っています。それらは単に
outer()
が実行されるまで宣言されていないだけです。また、プライベート スコープでもありません。グローバル スコープを汚染します。そして、コールバックとして、外側のコールバックはまだ一度しか呼び出されないかもしれません。私はまだ、エイリアスを複数回呼び出す可能性が非常に高い配列にそれを適用することがどのように有用であるかはわかりません。
私が掘り起こすことができた唯一の '実世界' の例は この で、これは一度しか実行できないので、よりきれいに書き換えることができます、IMO。
私が思いつく唯一の用途は、モジュールが
[name]_include
メソッドを呼び、グローバル空間にいくつかのネストされたメソッドを設定し
if (!function_exists ('somefunc')) {
function somefunc() { }
}
をチェックします。
PHPのOOPの方が明らかに良い選択でしょう :)
関連
-
[解決済み】空の配列要素を削除する
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] PHPのエラーを表示させるにはどうしたらいいですか?
-
[解決済み] PHPのstartWith()関数とendsWith()関数
-
[解決済み] PHPのstdClassとは何ですか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルは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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】phpのob_start()の使い道は?
-
[解決済み】不明なMySQLサーバーのホスト
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み] SAJAXは死んだか?何を置き換えるべきか?
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】子テーマのCSSが親テーマをオーバーライドしない
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない