2010-11-08 4 views
29

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

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

ответ

38

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. Передать переменную by reference.

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

Для третьего примера (C), если первая и последняя строки ссылаются на $ var или $ funcVar ... или если последняя строка будет '$ var = checkdate ($ var);'? –

+2

@JeromyFrench Первая и последняя строка относятся к переменной во внешней области с именем '$ var'.Внутри функции это может иметь любое другое имя, поэтому я выбрал '$ funcVar' специально, чтобы проиллюстрировать, что имя может отличаться. Что касается '$ var = checkdate ($ var);', вся цель этого примера состояла в том, чтобы показать передачу _ через reference_ и изменение переданной переменной непосредственно в функции. –

+2

Хорошо, думаю, я понял. 'function checkdate (& $ funcVar)' в сочетании с 'checkdate ($ var);' сопоставляет внешний '$ var' с внутренним' $ funcVar'. –

44

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

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

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

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

+0

, но я хочу изменить глобальную переменную, поэтому независимо от того, что я устанавливаю var to, будет ли она влиять на глобальную переменную вне функции? –

+4

То, что это будет делать. Использование 'global' изменяет переменную' $ var' внутри функции, чтобы указать на глобальную. Когда вы изменяете эту переменную внутри функции, она изменит глобальную. – Buggabill

8

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

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

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

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

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

например. $ Var = checkdate();

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

функцию checkdate (& $ значения) { , если (условие) { $ значения [ "дата" ] = "01-01-11"; } }

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

+1

Альтернатива № 2 - король. – Stephen

5

Тест проход по ссылке

$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); 
Смежные вопросы