2012-05-04 5 views
1

LinuxサーバーからWindowsにPHP Webサイトを転送しました。値を持たないPHP変数を参照する

$action = $_GET['action']; 
if($action=='add'){ 
    echo 'good'; 
} 

しかし、これは上のページの読み込みを防ぐ:$_GET['action']が設定されていない場合、以下のコードは無視されるLinuxサーバ上

:すべては一つの巨大な違いを除いて同じように機能しているようですWindowsサーバー。

仕事は何ですかん:

if(isset($_GET['action'])){ 
    $action = $_GET['action']; 
}else{ 
    $action=''; 
} 

if($action=='add'){ 
    echo 'good'; 
} 

2質問:

  1. 値を持たない変数のより寛容であることをサーバーを設定する方法はありますか?

  2. 2番目のコード例はより良い方法ですか?変数の@シンボルインフロントを置く

+2

未定義の変数エラーは決して抑止しないでください。常に存在を確認してください。 – Nadh

答えて

3
Is there a way to configure the server to be more forgiving of variables that don't have a value? 

エラーを無視するためにPHPを教えてくれます。しかし、私はこれを悪い習慣と考えています。

Is the second code example better practice? 

私はそれを良い習慣とみなし、常にチェックすることをお勧めします。

IMOあなたは2番目に行くべきです、あなたはいつも三項演算子を使うことができます。その代わりに

if(isset($_GET['action'])){ 
    $action = $_GET['action']; 
}else{ 
    $action=''; 
} 

のあなたは

$action = isset($_GET['action']) ? $_GET['action'] : ''; 

両方が同じことをを書くことができます。

+0

説明なしでdownvote?あなたがdownvoteの理由を説明できるなら、私は改善するつもりです。 –

+0

ありがとうございます!特に三項演算子の提案 – user1375324

2

第2のサーバーは、既定でエラーを表示するように構成されていますが、最初のサーバーはデフォルトでは表示されません。

あなたのページの上部に次のコードを配置する場合、それは同様に最初のサーバー上の通知が表示されます:

error_reporting(E_ALL); 

変数は常に良い習慣です存在するかどうかの確認を。

0

私の意見では、配列インデックスまたは変数が設定されているかどうかを確認し、控えめに冗長にレポートするエラーを保つことは間違いありません。

この状況が発生するたびにデータを扱いやすくするために(通常はオプションの設定データを保持するためにPHP配列を使用していて、コードに適切なデフォルトを埋め込むことが多い)

function aex(&$srcArray, $variableName, $defaultValue = null) 
{ 
    return isset($srcArray[$variableName]) 
      ? $srcArray[$variableName] 
      : $defaultValue 
      ; 
} 

だから、あなたはちょうどこのようなあなたの変数を抽出したい::

$action = aex($_GET, 'action', 'none'); 

そして、それを常に次のように、私のコアユーティリティコードに隠れて、それが建設的な配列の抽出機能を有することが判明していますauを持つことが保証されます警告をスローしないでください。

関連する問題