Я получил эту source_folder/config.php файл:включил файл, содержащий файлы, включенные в него?
<?php
$config['database'] = array (
'host' => 'localhost',
'user' => 'root',
'pass' => '',
'db' => 'game'
);
?>
Это source_folder/класс/core.class.php файл:
<?php
include_once $_SERVER['DOCUMENT_ROOT'].'config.php';
function __autoload($sName) {
$aName = explode('_',$sName);
if($aName[0] == 'Model')
include_once $_SERVER['DOCUMENT_ROOT'].'class/model/' . strtolower($aName[1]) . '.class.php';
elseif($aName[0] == 'View')
include_once $_SERVER['DOCUMENT_ROOT'].'class/view/' . strtolower($aName[1]) . '.class.php';
elseif($aName[0] == 'Controller')
include_once $_SERVER['DOCUMENT_ROOT'].'class/controller/' . strtolower($aName[1]) . '.class.php';
elseif($aName[0] == 'Core')
include_once $_SERVER['DOCUMENT_ROOT'].'class/' . strtolower($aName[1]) . '.class.php';
}
class Core {
}
И это source_folder/класс /config.class.php file:
<?php
include_once $_SERVER['DOCUMENT_ROOT'].'class/core.class.php';
/**
* Description of config
*
* @author Lysy
*/
class Core_Config extends Core {
static function GetConfigArray($name) {
return $config[$name];
}
}
?>
Когда я положил var_dump($config['database']);
в core.class.php Результатом является дамп переменной. Но когда я положил var_dump(Core_Config::GetConfigArray('database'));
в любом месте, он сбрасывает NULL. В чем проблема? Является ли config.php включены в core.class.php также включены в config.class.php, как она включает в себя core.class.php? Из того, что я знаю, это должно быть, но, похоже, этого не происходит.
EDIT: Я также попытался поставить var_dump($config['database']);
в config.class.php но и свалки, как NULL.
EDIT 2: я решил его с помощью
class Core {
static public function getWholeConfig() {
global $config;
return $config;
}
}
в core.class.php файл и
static function GetConfigArray($name) {
$config = Core::getWholeConfig();
return $config[$name];
}
в config.class.php файл, но все еще я не Не понимаю, почему последний файл не видит переменную $config
. Я имею в виду не в области класса, но где угодно, эта переменная включена в core.class.php и хотя core.class.php включен в config.class.php самой переменной нет. Зачем?
Читайте на http://www.php.net/manual/en/language.variables.scope.php – mario
Это о доступности переменных в функции, я понимаю, что я не могу вернуть '$ config [$ name]', потому что переменная объявлена вне класса 'и области метода. Но почему, когда я пытаюсь выгрузить переменную за пределами класса в том же файле, она сбрасывается как * NULL *? –
Наличие вашего $ config массива в действительной глобальной области зависит от того, откуда был вызван скрипт include. Включенные сценарии не выполняются в глобальной области по умолчанию. Автозагрузчик имеет локальную функциональную область. – mario