2011-11-11 8 views
7

私は現在ウェブサイトをプログラミング中です(PHP4で)。私は、実行時に変更されない値を定数で保存する予定です。それらは、例えば、データベースのログインデータのバージョン番号です。PHPで定数を使用する時期と使用方法

質問1:データを定数に保存することによって発生する可能性のある(セキュリティに関連する)問題はありますか?

私は定数を定義して呼び出すには、以下のん現時点では:

define("VERSION", "1.0"); 
echo "Current version: ".VERSION."."; // Result: "Current version: 1.0." 

私を悩ませる一つのことがあります:ケースで定数が定義されていない、「間違った」変数名が代わりに返されます例えばNULL。私が誤って間違った定数名は機能constant()を使用している入力されたとき、私は、エラーメッセージや戻り値「NULL」を取得することが分かっ

define("VERSION", "1.0"); 
echo "Current version: ".VERSIONXXX."."; // Result: "Current version: VERSIONXXX." 

一つの解決策:

define("VERSION", "1.0"); 
echo "Current version: ".constant("VERSIONXXX")."."; // Result: "Current version: ." 

質問2:私は防ぐことができます別のやり方では、PHPは存在しない変数の名前を返しますか?

質問3:PHPの定数の値は、常に関数constant()を使用して返す必要がありますか?

+4

PHP4には何も理由がありますが、これはもはやアクティブではありませんか? – danielrsmith

答えて

3

逆の順序で:

質問3:いいえを 質問2:実際はそうではありませんが、調整が可能です。

(質問1 :) error_reportingのためです。あなたはPHP Webサーバーがいくつかのエラーを隠すように構成されています。仮定 'MY_CONST'

エラー - あなたはあなたのスクリプトの先頭に

error_reporting(E_ALL); 

を追加する場合は、未定義の定数MY_CONSTの

使用を取得します。残念ながら、PHPの長い歴史の中で、定数は文字列として解釈できるという問題があります。

あなたは定数を使用すると、

if(defined('MY_CONSTANT') { 
    //do something 
} 

を定義して使用することができますが、単独の単語の定数が暗示するので、私の個人的な意見は、これを必要とする多くの例があってはならない最初の場所に設定されたSHUREすることができない場合保証された存在。私が考えることができる唯一の例外は典型的なヘッダーテストです。

if(!defined('MY_APP_IS_PRESENT')) { 
    die('You can not call this file on its own, please use index.php.'); 
} 

そして最後ティップ:多分firephpで、移動して、自分自身errorhandler機能を作りますか?

1

まあ、常にdefined関数を使用して定数が存在することを確認できます。

echo defined(VERSION) ? VERSION : ""; 

ない最良の答えが、実行可能:三元の文と組み合わせることで、あなたは単に空の文字列、のようなものをエコーだろうか?あなたが存在しない定数を使用しようとするとdefined()ため

PHPマニュアルはhttp://php.net/manual/en/function.defined.php

6
  1. であり、PHPは自動的にあなたがVERSIONXXXを参照してください理由である、それは代わりに文字列であると想定します。

  2. IIRCエラー報告が適切なレベルにある場合は、警告をスローします。ここでの最良の解決策は、コードが適切な定数名を使用することです。

  3. 定数の名前が分かっていれば、それを直接使うのが最も簡単です。 echo MY_CONSTANT
    あなたが(例えば、それの名前が変数である)定数の名前がわからない場合は、constant()を使用します。

 
    $name = 'MY_CONSTANT'; 
    echo constant($name); 
関連する問題