Передача переменных PHP во включенный файл?

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

Я проверяю, зарегистрирован ли пользователь, используя метод класса $ session в верхней части каждой страницы администратора. Тем не менее, я хочу динамически настраивать файл заголовка в зависимости от того, зарегистрирован ли пользователь и на каком уровне роли у пользователя.

Поэтому я проверяю $session->is_logged_in() а затем я пошел вперед и определил переменную $logged = true ; использовать позже. Затем я использую метод $user->find_by_id($session->id) для создания нового объекта User и сохраняю $user->role_level в новом var, называемом $role_level для удобства использования.

Все это происходит в верхней части страницы. Дальше вниз обработка прошлой формы страницы и т. Д. Является командой include("../_layouts/header.php") . Затем в файле header.php я использую небольшие проверки, например if(!$logged) { ... } else { ... } . Однако…

Я получаю следующие ошибки:

 Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 119 Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 131 Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 138 

Как это может быть? Я определяю vars в файле, прежде чем включать header.php! Разве это не работает?

FYI, все работало нормально, пока я не попытался использовать $logged в файле header.php.

Переменные распространяются на включенные файлы, поэтому должно быть, что переменная НЕ установлена ​​при вызове include: попробуйте проверить, если это так, а затем выяснить, почему переменная не установлена ​​в этой точке.

Например, если вы определили $, зарегистрированный внутри блока «if» или внутри функции, то он не будет распространяться вне него: вы должны определить его во внешней области (на том же уровне, на котором вы вызываете оператор include) , И вы должны определить его для случая, когда пользователь не вошел в систему, а не только в том случае, когда пользователь вошел в систему. Если переменная не инициализируется значением false, проверка (! $ Logged) выдаст предупреждение. Скажем $ logged = false; в начале вашей работы.

Попробуйте что-то очень простое, например

 // file1.php $var = "foobar"; // file2.php include("file1.php"); // or require("file1.php"); die($var); в // file1.php $var = "foobar"; // file2.php include("file1.php"); // or require("file1.php"); die($var); 

Это работает? Возможно, это проблема вне вашего кода.

Просто мнение … вместо того, чтобы включать код для выполнения в глобальном пространстве и в зависимости от другой определяемой глобальной переменной, включайте свой файл где бы то ни было и чтобы код внутри header.php был организован в соответствующие функции. Затем, где вы хотите получить результат из header.php, вызовите соответствующую функцию с $ logged в качестве аргумента. Это поможет сделать ваш код более сплоченным и легче тестировать (как в модульных тестах).

Вместо if (!logged) попробуйте if (empty($logged)) . Это не будет генерировать уведомление в случаях, когда переменная не была установлена.