Похоже, у вас проблема с изменяемой областью видимости.
Когда вы include
файла, код из второго файла выполняется в той же области, что и код, в котором находится ваша инструкция include
.
Рассмотрим следующий код:
first.php
<?php
$var = 'Apples';
include('second.php');
echo ' and ', $var;
second.php
<?php
$var = 'Oranges';
echo $var;
Запуск first.php
приведет к выводу "Oranges and Oranges"
, поскольку ваш код в second.php
будет запущен в глобальной области видимости. После перезаписи $var
кодом в second.php
невозможно получить исходное значение, поскольку они представляют собой одну и ту же переменную в одной и той же области видимости.
Теперь рассмотрим следующее:
third.php
<?php
function include_isolated($file) {
include($file);
}
$var = 'Apples';
include_isolated('second.php');
echo ' and ', $var;
Запуск third.php
выдаст "Oranges and Apples"
, тогда как second.php
будет запущен в рамках функции include_isolated()
. В этом случае $var
и $var
являются двумя отдельными переменными, поскольку они не находятся в одной области видимости.
Если вам нужно значение из глобальной области (определенное в third.php
, вы можете использовать суперглобальный $GLOBALS
для доступа к нему следующим образом:
$globalVar = $GLOBALS['var']; // $globalVar = "Apples"
Вы также можете изменить функцию include_isolated()
, чтобы сделать $var
глобальным следующим образом:
function include_isolated($file) {
global $var;
include($file);
}
При этом $var
снова станет глобальной переменной области видимости. Это сделает присвоение $var
во втором файле, чтобы перезаписать значение в первом. Другие переменные не будут затронуты.
Для получения дополнительной информации о области видимости переменных , пожалуйста, прочитайте Документацию PHP .