2011-08-07 7 views
8

私は簡単にスイッチを反転できるようにする必要があるphpファイルを持っています。スイッチは、ローカルサーバーの場合は1に設定され、運用サーバーの場合は0に設定されます。 local_on = '1';またはlocal_on = '0';どちらの方法が良いですか?いずれかの方法が良い方法は、どちらの方法がベストプラクティスですか?グローバル対定義

+0

のようなクラスの宣言です。彼らが言ったことをする。 – cspray

+0

'1'/'0'の代わりにtrue/falseを使用する意味があります – RiaD

+1

関連:http://stackoverflow.com/questions/1412557/identify-development-vs-production-server-in-php – karim79

答えて

9

define。後でその値を変更することはできず、その値は常にすべてのスコープで利用できます。

1

特有の名前(すべて大文字のdefine)を選択して、現代的な方法でグローバル変数にアクセスするには、$GLOBALSスーパーグローバル(sic)を使用してください。また、グローバル変数はの変数であるため、理論上は偶然に値を変更することができます。

事故によるスイッチの設定や設定解除の展開を簡素化していないために、私はあなたが「なぜまた

// Turn on debugging code on local machine 
define('MYPAGE_LOCAL_ON', $_SERVER['SERVER_NAME'] == 'my-dev-box'); 

のように、私は見ていない、$_SERVERの性質を調べることによって、それを自動的に設定し、自動的にお勧めしますdスイッチを文字列または整数に設定します。 boolean valuestruefalseの方が適切です。

+0

woa ..素晴らしい...いくつかの次のレベルの改善...ありがとう! –

10

グローバル変数は、その名前が示すように、変数です。つまり、値はコードのどの部分でも変更できます。あなたの場合はおそらくあなたが望むものではありません。一方

、一定の(あなたがdefineで設定だろうと)は...よく... 定数です。一度設定すると変更することはできません。あなたの場合はおそらくあなたが望むものです。


変数と定数の考えを考えてみましょう。この種のスイッチでは、一般にdefine()と定数を使用します。

+0

シンボルと定数の定義は本当に異なるものです。 – grantwparks

4

グローバル変数は、あなたがすでによく知っていると思う理由のために悪いニュースであり、コード内のすべての関数とメソッドでglobal $varを宣言することを忘れないでください。 。定義された定数はどこでも自動的に利用可能です。さらに、スクリプトの実行中に、ある変数から別の変数に誤って変数を設定する可能性があります。これが起こった場合、これは本当に見つけにくいバグを引き起こす可能性があります。

+5

"というコードですべての関数とメソッドで' global $ var'を宣言しなければならないので、 "//いいえ、そうではありません。 –

1

defineが好ましい。理由は:、PHP 5.3以降にconstを使用することができます。

  • あなたは

PS

  • あなたは醜い$ GLOBALS建設せずに他のスコープ(元関数)に使用することができ、誤ってそれを再定義することはできません定数を宣言するにはdefineだけでなく、それは私のために読みやすいです

  • 0

    簡潔に言えば、defineはあなたが探しているものです(for said reasons)。

    しかし、将来の開発に向けて、実行中のコンテキストを提供するアプリケーション全体の依存性のようなものを探すかもし​​れません。これは定数ではできませんので、defineだけでなく、グローバル変数はどちらも間違っています。

    2

    シンボルを定義するよりも少し良く実行し、名前の衝突を最小限に抑えることがもう一つの方法は、私はより速く入力する3人が、私の前にそのようにしたとき、 `define`を答えることがちょうど約た

    abstract config { 
        const LOCAL = true; // toggle to false 
    // or maybe 
        const SERVER = 'local'; // toggle to 'remote' 
    // (maybe having if (config.SERVER == 'remote') would be more readable in some 
    // cases than if (!config.LOCAL) depends on your app) 
    } 
    
    +1

    私は物事 '(DEBUG_MODE)'が十分に読むことができる場合 – RiaD

    +0

    !部分は文脈によって味の問題です。定義の代わりにクラスconstを使用することは、コードと効率の理由から、より優れています。 – grantwparks

    +0

    const valueename = 'smth'もクラス5.3から利用できます。私は効率の理由がここで作動していないと思う。とにかく、私はクラスが1つ以上の定数がある場合、コードがより正確になることに同意します – RiaD

    関連する問題