2016-06-02 2 views
0

Как сделать переменные видимыми при включении какого-либо файла. Например:Видимость Var при включении файла

code.php:

<?php 
    global $var; $var = "green"; 
?> 

index.php:

<?php 

include("code.php"); 

Function index(){ 
    echo "The apple is $var"; 
} 

?> 

Пожалуйста, обратите внимание, что в code.php есть много глобальных переменных (~ 150 переменных), и все переменные используются во многих различных функциях внутри индекса index.php.

+1

Это не проблема с включением, а проблема с переменной областью. Вам не нужно определять его как 'global' в' code.php'. Когда вы включаете файл, вы наследуете все эти переменные.Вам нужно передать его в качестве аргумента в функции, 'function index ($ var) {}', а затем вызвать эту функцию 'index ($ var);' – Qirel

+0

Для дальнейшего чтения взгляните на это: [Ссылка: Что переменная область видимости, какие переменные доступны из того, где и какие ошибки «неопределенной переменной»?] (http://stackoverflow.com/questions/16959576/reference-what-is-variable-scope-which-variables-are-accessible -from-where-and) – Qirel

+0

@Qirel благодарит вас за ответ –

ответ

1

Это проблема, связанная с переменной областью, плюс вам не нужно определять $var как глобальный.

Когда вы включаете файл, вы можете себе представить, что он просто скопирует содержимое другого файла в текущий файл.

E.g.

code.php

$includedName = 'Tom'; 

index.php

include 'code.php'; 

function sayHello($name) 
{ 
    echo 'Hello ' . $name; 
} 

sayHello($includedName); // Hello Tom 
+0

Разве это «область» - единственный способ решить мою проблему? Можем ли мы создать любые классы для его решения без ограничений? Поскольку весь код уже написан, и я думаю, что нет необходимости создавать область видимости, я пытаюсь локализовать веб-сайт, поэтому мне нужно включить языковые строки из языковых файлов. –

+0

Это не то, что * решает * вашу проблему, так работает PHP, и это корень, если ваша проблема. Не видя полного кода, я не могу ничего сделать, но думаю, но, вообще говоря, решение выше - лучший способ. Вы передаете переменную в качестве аргумента в функциях и используете ее так. – Qirel

+0

@ Qirel ясно, спасибо! –

0

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

Сломать область видимости функции и тянуть в переменных из глобального масштаба необходимо вызвать global ключевое слово из функции:

<?php 

$var = "green"; 

Function index(){ 
    global $var; 
    echo "The apple is $var"; 
} 

?> 

This answer подытоживает почему global переменные считаются плохой практикой:

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

Однако в этом конкретном примере вы не изменяете состояние $var - только чтение. Поэтому проблемы минимальны.

Проблемы с глобальным состоянием можно прочитать более подробно на Programmers.SE.

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