2013-03-04 5 views
2

У меня возникли проблемы с некоторым устаревшим кодом, который я пытаюсь добавить в проект Yii.php function глобальные определенные переменные не работают с Yii

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

$testVar = '123'; 
function testOutput() { 
    global $testVar; 
    var_dump($testVar); 
} 
testOutput(); 

Теперь, если я включить этот файл в простом файле PHP он работает и выводит

string '123' (length=3) 

Но если включить этот файл в контроллере Yii или даже в выходных шаблонах, то это

null 

Я попытался найти эту проблему, но я просто получаю кучу результатов о том, что люди используют глобальные переменные неправильно. Я уверен, что это не проблема Yii, но, скорее всего, настройка php_ini, которую устанавливает Yii, но я не могу ничего найти при поиске кода или документов Yii, которые объяснят это.

Этот пример можно протестировать, просто создав файл с моим первым блоком кода, а затем включите его в шаблон или контроллер Yii. Я даже тестировал его с помощью чистого проекта Yii.

Надеюсь, я не навредил своим шансам разобраться в этом, отметив этот вопрос с Yii, так как у меня есть ощущение, что это не просто проблема Yii.

Любые идеи были бы очень признательны.

+5

Если вы объявили '$ testVar = 123' внутри функции/класса, это не является глобальным. – DCoder

+1

, если вы используете 'global $ testVar; $ testVar = 123; 'в начале до определения функции, он будет работать, я только что проверил с контроллером Yii –

+0

@MarkoD вы правы, но почему это? Любые документы, чтобы сказать, почему это необходимо и почему структура Yii заставляет это потребоваться? Также вы положили это как ответ, и я бы принял его. – byoungb

ответ

5

Если вам нравится это, он будет работать, я просто проверял с Yii контроллером

global $testVar; 
$testVar = '123'; 
function testOutput() { 
    global $testVar; 
    var_dump($testVar); 
} 
testOutput(); 
+0

Спасибо! Имел ту же проблему. Почему это происходит? у вас есть идея? – MeV

2

Как упоминалось DCoder, если Youre объявлять их внутри класса, функции/метода, то они не являются глобальными. Вы можете попробовать назначая их в массив $ _GLOBALS хотя:

$GLOBALS['testVar'] = 123; 

Однако в зависимости от унаследованного кода и как Youre ее интеграция может потребоваться изменить все ссылки в этом унаследованном коде использовать $GLOBALS['thevar'] вместо $thevar или выполнить extract($GLOBALS) в верхней части некоторых или всех устаревших файлов.

+0

В текущем коде используются глобальные переменные, главным образом, для объекта соединения memcached и объекта соединения mysqli, который используется несколькими различными функциями и классами. – byoungb

Смежные вопросы