ご存知のように、returnキーワードは値を返し、現在の関数を終了します。つまり、これは一部の関数内でのみ使用されていました。
しかし、 index.phpファイル(Webサーバーのルート内)でも、関数の外部でphp-devがreturnキーワードを使用しているのを見ました。それはどういう意味ですか???? ちなみに、関数内にファイルを要求するのは論理的かもしれませんが、このスタイルは私のものではありません。
ご存知のように、returnキーワードは値を返し、現在の関数を終了します。つまり、これは一部の関数内でのみ使用されていました。
しかし、 index.phpファイル(Webサーバーのルート内)でも、関数の外部でphp-devがreturnキーワードを使用しているのを見ました。それはどういう意味ですか???? ちなみに、関数内にファイルを要求するのは論理的かもしれませんが、このスタイルは私のものではありません。
ドキュメントが行うこと以上に言うことはありません。
の一般的な使用法についてreturn
:
関数内から呼び出された場合、
return
ステートメントは現在の関数の実行をただちに終了し、その引数を関数呼び出しの値として返します。eval()
returnは、ステートメントまたはスクリプトファイルの実行も終了します。
あまり一般的ではない使用法について:
グローバルスコープから呼び出された場合、現在のスクリプトファイルの実行は終了します。現在のスクリプトファイルが
include
dまたはrequire
dの場合、制御は呼び出し元のファイルに戻されます。さらに、現在のスクリプトファイルがインクルードされている場合、returnに指定された値は、include呼び出しの値として返されます。メインスクリプトファイル内からreturnが呼び出された場合、スクリプトの実行は終了します。現在のスクリプトファイルがphp.iniのauto_prepend_fileまたはauto_append_file構成オプションによって指定されている場合、そのスクリプトファイルの実行は終了します。
マニュアルのどこかに文書化されています
// myFile.php
return array( 'foo' => 'bar');
// somewhere else
$config = include 'myFile.php';
echo $config['foo'];
メインスコープで使用する場合return
、phpはファイルインクルードを残し、その値をインクルードの「戻り値」として使用します(include[_once]()
、require[_once]()
)。
しかし、index.phpファイル(Webサーバーのルート内)でも、関数の外部でphp-devがreturnキーワードを使用しているのを見ました。それはどういう意味ですか?
あなたは共通の目的を知っています。しかし、あなたが求めているのは、phpインクルードファイルへのコードインジェクションを防ぐために使用されます。それを説明するこの投稿を見てください:
PHPインジェクションファイルでのコードインジェクションの防止
コーディング標準について議論している間、私はphpファイルの最後に?>を追加することに反対しました。しかし、miqrogrooveは、それと各ファイルの最後に追加のreturnステートメントを含めることが実際に意味をなす理由について興味深い側面を指摘しました。これ(単なるreturnステートメント)は、攻撃者が既存のPHPファイルにペイロードコードを追加するのを防ぐことができます。たとえば、既知のインクルードファイル。対策は非常に簡単で、ファイルの最後にreturnステートメントを追加するだけです。これにより、インクルード「サブルーチン」が終了します。
例:
/* all the include file's php code */
return;
?>