2013-12-15 2 views
0

Я получил эту 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 самой переменной нет. Зачем?

+0

Читайте на http://www.php.net/manual/en/language.variables.scope.php – mario

+0

Это о доступности переменных в функции, я понимаю, что я не могу вернуть '$ config [$ name]', потому что переменная объявлена ​​вне класса 'и области метода. Но почему, когда я пытаюсь выгрузить переменную за пределами класса в том же файле, она сбрасывается как * NULL *? –

+0

Наличие вашего $ config массива в действительной глобальной области зависит от того, откуда был вызван скрипт include. Включенные сценарии не выполняются в глобальной области по умолчанию. Автозагрузчик имеет локальную функциональную область. – mario

ответ

0

Место конфигурации в качестве переменной возврата к функции как таковой

function getConfig(){ 
    $config['database'] = array (
    'host' => 'localhost', 
    'user' => 'root', 
    'pass' => '', 
    'db' => 'game' 
    ); 
    return $config; 
} 

Тогда в своем классе вы можете использовать:

$config = getConfig(); 
    return $config[$name]; 

Я поставил var_dump($config); в верхней части как config.class и core.class. Если бы я просто загрузить config.class в моем браузере, я получаю

array (size=1) 
    'database' => 
    array (size=4) 
     'host' => string 'localhost' (length=9) 
     'user' => string 'root' (length=4) 
     'pass' => string '' (length=0) 
     'db' => string 'game' (length=4) 

array (size=1) 
    'database' => 
    array (size=4) 
     'host' => string 'localhost' (length=9) 
     'user' => string 'root' (length=4) 
     'pass' => string '' (length=0) 
     'db' => string 'game' (length=4) 
+0

Я не хочу никаких функций внутри файла ** config.php **, но я решил это, хотя, спасибо. В любом случае моя проблема - это что-то еще, не могли бы вы посмотреть мое последнее редактирование? –

+0

Я обновил сообщение с моими результатами. Он виден в любом файле, который включен в него до тех пор, пока он не находится внутри функции или класса. – mseifert

+0

Я получаю разные результаты, возможно, это зависит от настроек ** php.ini **. Спасибо за помощь в любом случае, я все лучше и лучше каждый день на этом :) –

Смежные вопросы