3

PHP が switch ステートメントを処理する方法に関する簡単な質問です。

次のコードがある場合

switch (APPLICATION_ENVIRONMENT) {
    case 'production':
        echo 'production';
        break;
    case 'stage':
        echo 'stage';
        break;
    default: //dev
        echo 'dev';
}

APPLICATION_ENVIRONMENT がどこにも定義されていない場合でも、これはデフォルトとして評価されますか? それともエラーをスローしますか?実行中のアプリケーションの既存のソースを見ると、以前にこれを行った人は誰でも、最初に定数に対して if(defined()) を実行して、存在するかどうかを確認しています。これは、switch がそれを適切に評価できる場合は無駄です

ありがとうDJ

4

3 に答える 3

3

スイッチを評価しますが、エラーをスローします。

代わりにこれを試してください:

$env = defined('APPLICATION_ENVIRONMENT') ? APPLICATION_ENVIRONMENT : null;

switch($env) {
  ..
}
于 2012-06-27T02:47:07.843 に答える
1

未定義の場合、APPLICATION_ENVIRONMENTPHP によって string として解釈され、文字列が定義済みの switch case の 1 つではない"APPLICATION_ENVIRONMENT"ため、デフォルトにフォールスルーされます。"APPLICATION_ENVIRONMENT"

echo APPLICATION_ENVIRONMENT;

PHP 通知: 未定義の定数 APPLICATION の使用 - 行 1 の php シェル コードで「APPLICATION_ENVIRONMENT」を想定

PHP は、未定義の定数に遭遇すると通知を発行し、良くも悪くも、それを文字列として引用するつもりであると仮定して処理します。

于 2012-06-27T02:45:34.417 に答える
0

APPLICATION_ENVIRONMENTコードで が定義されていない場合、単純に文字列として機能し、デフォルトのスイッチ値を出力します。

Switch ステートメントには変数が必要です。したがってAPPLICATION_ENVIRONMENT、コードのどこかで定義したとしても、switch($APPLICATION_ENVIRONMENT){..cases}代わりに as を使用しますswitch(APPLICATION_ENVIRONMENT){..cases}

于 2012-06-27T04:22:23.567 に答える