Изменение глобальной переменной внутри функции PHP - PullRequest
37 голосов
/ 08 ноября 2010

Я пытаюсь изменить переменную, которая находится вне функции, внутри функции.Потому что, если дата проверки функции превышает определенную сумму, мне нужно изменить год для даты в начале кода.

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

Ответы [ 4 ]

49 голосов
/ 08 ноября 2010

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();

С. Передайте переменную по ссылке .

$var = "01-01-10";
function checkdate(&$funcVar){  
    if("Condition"){
        $funcVar = "01-01-11";
    }
}
checkdate($var);
44 голосов
/ 08 ноября 2010

Просто используйте ключевое слово global так:

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

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

Тогда любая ссылка на эту переменную будет глобальной.

8 голосов
/ 08 ноября 2010

Все ответы здесь хороши, но ... вы уверены, что хотите это сделать?

Изменение глобальных переменных изнутри функций, как правило, плохая идея, потому что это может очень легко привести к тому, что код спагеттислучается, когда переменные меняются по всей системе, функции взаимозависимы и т. д. Это настоящий беспорядок.

Пожалуйста, позвольте мне предложить несколько альтернатив:

1) Объект-ориентированное программирование

2) Наличие функции, возвращающей значение, которое присваивается вызывающей стороной.

например, $ var = checkdate();

3) Сохранение значенияв массиве, который передается в функцию по ссылке

function checkdate (& $ values) {if (условие) {$ values ​​["date"] = "01-01-11";}}

Надеюсь, это поможет.

5 голосов
/ 21 января 2013

Попробуйте этот проход по ссылке

  $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);
...