Здесь возникает проблема просто потому, что PHP сейчас интерпретирует ваш файл. Имеются вложенные функции.
Вот как ваш код в настоящее время выполняется:
function something() {
$include_file = 'test.php';
if ( file_exists($include_file) ) {
//require_once ($include_file);
$flag = 4;
function test() {
global $flag;
echo '<br/>in test flag="'.$flag.'"';
if ($flag) {
echo 'flag works';
//do something
}
}
//end require_once ($include_file);
test();
}
}
something();
exit;
Как вы видите, при присвоении значения 4
$ flag
( $ flag = 4
) вы находитесь в области действия функции что-то ()
,
В test ()
, поскольку вы объявляете $ flag
как глобальный в этой функции, $ flag
является совершенно другой переменной, глобальной для всего сценария.
Чтобы избежать этой проблемы, используйте сверхглобальный $ GLOBALS
. Это быстрее, чем использовать global
в любом случае, и таким образом вы не смешиваетесь в области проблем, как выше:
function something() {
$include_file = 'test.php';
if ( file_exists($include_file) ) {
//require_once ($include_file);
$GLOBALS['flag'] = 4;
function test() {
global $flag;
echo '<br/>in test flag="'.$GLOBALS['flag'].'"';
if ($GLOBALS['flag']) {
echo 'flag works';
//do something
}
}
//end require_once ($include_file);
test();
}
}
something();
echo $flag; //echos 4
exit;
-121--4746184- Вы можете сделать, и я рекомендую вам сделать это. Я был в вашем штате, около года назад, модифицировать небольшой кусок кода здесь и там, и через пару недель я обнаружил, что это полный беспорядок, не зная, что я сделал, по какой причине.
Установите SVN, установите расширение оболочки Tortise SVN, создайте локальное репо, а затем начните фиксацию по мере необходимости. Посмотрите на учебник Джеффа Этвуда - SVN в Windows
(Если вы не упомянули о вашей ОС, Linux должен поставляться с установленным svn, в противном случае просто установите его из диспетчера пакетов).
-121--3286585- Можно просто создать "репо" в файловой системе без запуска сервера. В этой статье даются подробные инструкции. В основном вы создаете папку репо, используйте TortiveSVN для создания репозитория в этой папке, а затем извлекаете репо, используя файловый протокол ( file :///path/to/repo
), в вашу рабочую область разработки..
Git или Mercurial - новейшие системы управления версиями, которые действительно могут лучше подходить для этого, чем SVN. TortoiseHG - это Mercurial-совместимый графический интерфейс, похожий на TortoiseSVN. Рабочий процесс очень похож: добавьте файлы, которые вы хотите обновить, зафиксируйте при достижении определенной вехи и обновите / выполнив проверку, если вы хотите вернуться к более ранней версии.
Mercurial намного проще, чем SVN, в настройке и эффективном использовании, как только вы к нему привыкнете. Вам не нужно инициализировать отдельный репозиторий, он находится в вашем рабочем каталоге (просто запустите команду init в своем рабочем каталоге).
Если вам нужно работать над отдельными версиями одного и того же проекта, вы можете просто сделать копию своего рабочего каталога, зафиксировать различные изменения в каждой копии и, в конечном итоге, перенести изменения из одной в другую, если хотите (SVN требует, чтобы вы вручную создавать ветки в центральном репо, а слияния труднее получить правильно).
Репозитории Mercurial также намного проще резервировать и восстанавливать (вы всегда можете просто скопировать их, но вы можете использовать push и pull для инкрементной передачи в место резервирования)
Вот хороший справочник по Hg ; как только вы освоите основы, использование графического интерфейса будет естественным.
Вы можете это сделать, и я рекомендую вам это сделать. Около года назад я был в вашем штате, изменил небольшой фрагмент кода здесь и там, и через пару недель обнаружил, что это полный беспорядок, без возможности узнать, что я делал, когда и по какой причине.
Установите SVN, установите расширение оболочки Tortise SVN, создайте локальное репо, а затем начните коммит, когда захотите. Посмотрите руководство Джеффа Этвуда - SVN в Windows
(при условии, что Windows, вы не упомянули свою ОС, Linux должен поставляться с установленным svn, иначе просто установите его из своего пакета менеджер).