web-dev-qa-db-ja.com

関数内からグローバル変数を変更するPHP

関数の外部から変数を関数内から変更しようとしています。関数がチェックする日付が特定の量を超えている場合、コードの最初の日付の年を変更する必要があるためです。

$var = "01-01-10";
function checkdate(){
     if("Condition"){
            $var = "01-01-11";
      }
}
37
Chris Bier

A. global キーワードを使用して、アプリケーションスコープからインポートします。

$var = "01-01-10";
function checkdate(){
    global $var;  
    if("Condition"){
        $var = "01-01-11";
    }
}
checkdate();

B. $ GLOBALS 配列を使用します。

$var = "01-01-10";
function checkdate(){
    if("Condition"){
        $GLOBALS['var'] = "01-01-11";
    }
}
checkdate();

C.変数を渡す 参照による

$var = "01-01-10";
function checkdate(&$funcVar){  
    if("Condition"){
        $funcVar = "01-01-11";
    }
}
checkdate($var);
50
Alin Purcaru

次のようにglobalキーワードを使用するだけです。

$var = "01-01-10";
function checkdate(){
     global $var;

     if("Condition"){
            $var = "01-01-11";
      }
}

その変数への参照はグローバル変数になります。

44
Buggabill

ここでの答えはすべて良いですが、...これを実行してもよろしいですか?

関数内からグローバル変数を変更すると、スパゲッティコードが非常に簡単に発生するため、システム全体で変数が変更されたり、関数が相互に依存したりするなど、一般的に悪い考えです。これは本当に混乱です。

いくつかの代替案を提案させてください。

1)オブジェクト指向プログラミング

2)関数が値を返すようにします。この値は呼び出し元によって割り当てられます。

例えば$ var = checkdate();

3)参照によって関数に渡される配列に値を保存する

function checkdate(&$ values){if(condition){$ values ["date"] = "01-01-11"; }}

お役に立てれば。

8
Douglas Muth

このパスを参照してみてください

  $var = "01-01-10";
    function checkdate(&$funcVar){  
        if("Condition"){
            $funcVar = "01-01-11";
        }
    }
    checkdate($var);

または、上記と同じように試して、機能を同じままにします。

 $var = "01-01-10";
    function checkdate($funcVar){  
        if("Condition"){
            $funcVar = "01-01-11";
        }
    }
    checkdate(&$var);
5
rizon