1

ご存知のように、returnキーワードは値を返し、現在の関数を終了します。つまり、これは一部の関数内でのみ使用されていました。

しかし、 index.phpファイル(Webサーバーのルート内)でも、関数の外部でphp-devがreturnキーワードを使用しているのを見ました。それはどういう意味ですか???? ちなみに、関数内にファイルを要求するのは論理的かもしれませんが、このスタイルは私のものではありません。

4

3 に答える 3

2

ドキュメントが行うこと以上に言うことはありません。

の一般的な使用法についてreturn

関数内から呼び出された場合、returnステートメントは現在の関数の実行をただちに終了し、その引数を関数呼び出しの値として返します。eval()returnは、ステートメントまたはスクリプトファイルの実行も終了します。

あまり一般的ではない使用法について:

グローバルスコープから呼び出された場合、現在のスクリプトファイルの実行は終了します。現在のスクリプトファイルがincludedまたはrequiredの場合、制御は呼び出し元のファイルに戻されます。さらに、現在のスクリプトファイルがインクルードされている場合、returnに指定された値は、include呼び出しの値として返されます。メインスクリプトファイル内からreturnが呼び出された場合、スクリプトの実行は終了します。現在のスクリプトファイルがphp.iniのauto_prepend_fileまたはauto_append_file構成オプションによって指定されている場合、そのスクリプトファイルの実行は終了します。

于 2012-04-11T08:50:24.040 に答える
2

マニュアルのどこかに文書化されています

// myFile.php
return array( 'foo' => 'bar');

// somewhere else
$config = include 'myFile.php';
echo $config['foo'];

メインスコープで使用する場合return、phpはファイルインクルードを残し、その値をインクルードの「戻り値」として使用します(include[_once]()require[_once]())。

于 2012-04-11T08:50:26.597 に答える
1

しかし、index.phpファイル(Webサーバーのルート内)でも、関数の外部でphp-devがreturnキーワードを使用しているのを見ました。それはどういう意味ですか?

あなたは共通の目的を知っています。しかし、あなたが求めているのは、phpインクルードファイルへのコードインジェクションを防ぐために使用されます。それを説明するこの投稿を見てください:

PHPインジェクションファイルでのコードインジェクションの防止

コーディング標準について議論している間、私はphpファイルの最後に?>を追加することに反対しました。しかし、miqrogrooveは、それと各ファイルの最後に追加のreturnステートメントを含めることが実際に意味をなす理由について興味深い側面を指摘しました。これ(単なるreturnステートメント)は、攻撃者が既存のPHPファイルにペイロードコードを追加するのを防ぐことができます。たとえば、既知のインクルードファイル。対策は非常に簡単で、ファイルの最後にreturnステートメントを追加するだけです。これにより、インクルード「サブルーチン」が終了します。

例:

  /* all the include file's php code */
  return;
?>
于 2012-04-11T08:55:16.723 に答える