У меня есть файл config.php, где идет установка некоторых строковых констант (define), которые содержат в себе абсолютные пути к директориям файла, так же подключает (include_once) некоторые другие скрипты со всякими функциями и классами.
config.php
// заносим директории в константы
define('DIR_ROOT', $_SERVER['DOCUMENT_ROOT']);
define('DIR_CORE', DIR_ROOT . '/Core');
define('DIR_LIBRARY', DIR_CORE . '/Library');
define('DIR_CONTROLS', DIR_ROOT . '/Controls');
// подключаем лог
include_once(DIR_LIBRARY . '/Log.php');
// подключаем всю стандартную бибилотеку
include_once(DIR_CORE . '/fIncludeStandartLibrary.php');
Log::Add("либы подключены");
fIncludeStandartLibrary.php
$path = DIR_LIBRARY;
$content = scandir(DIR_LIBRARY);
foreach ($content as $key => $name) {
if (is_file("$path/$name") && $name != 'Log.php' && ($name != '.' && $name != '..')) {
Log::Add("<p>include $path/$name</p>");
include_once("$path/$name");
}
}
unset($content);
Здесь был обход папки из моей "стандартной библиотеки" и подключением их.
index.php
include_once('config.php');
RenderControl('header');
RenderControl('register form');
RenderControl('footer');
И сам fRendeControl.php
function RenderControl($controlName)
{
$ctrlDir = DIR_CONTROLS . "/$controlName";
if (file_exists($ctrlDir)) {
$content = scandir($ctrlDir);
foreach ($content as $key => $name) {
if (!is_dir("$ctrlDir/$name") && $name != '.' && $name != '..') {
include("$ctrlDir/$name");
Log::Add("include $ctrlDir");
} elseif ($name != '.' && $name != '..') {
Log::Add("Not found $ctrlDir - $name");
}
}
} else {
Log::Add("Not exist $controlName");
}
}
И, казалось бы, что в дальнейшем все подключенные скрипты должны позволять использовать свои функции\классы в любом месте сайта. И отчасти оно так и было, до некоторого момента. Но за пределами index.php RenderControl уже является неизвестной функцией. Понимаю, что пишу жуткий костыль с кучей дыр, но объясните, пожалуйста, наиболее слабое место здесь.
1) Проверьте, подключается ли вообще ваш файл с RenderControl(). Может ошиблись в логике. Прямо в файле с RenderControl() пропишите и проверьте.
echo "RenderControl() exists";
die();
2) Если подключается, возможно вы используете namespace. Т.е если вы определили функцию в файле без namespace, а потом пытаетесь ее использовать в namespace, то надо ставить знак обратного слэша. Ну либо прописывать namespaceфункции.
\RenderControl();
\namespace\RenderControl();
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем доброго времени суток! Делаю одно задание и столкнулся с небольшой трудностьюУ меня есть некий csv файл с названиями столбцов - (За период;Учетный...
Почему нельзя удалять из коллекции в цикле for-each?
Сначала когда запускаешь приложение все работает и тема и соответствие цветов все окНо когда вызываешь метод Update цвета и тема устанавливаются...
Как в HashMap при добавлении нового ключа создавать новый лист, который принадлежит только этому ключу, и как обращаться к нему?