2016-06-19 2 views
-1

Когда я использую require_once или include_once включить файл, он не работает, в то время как при использовании require или include он работает отлично.«требуют» работы, но «require_once» не работает

public function ParseURL() { 
    require_once (APP_PATH . "config/config.php"); 

    $this->url_as_parts = explode('/', $this->url); 
    $class = isset($this->url_as_parts[0]) ? $this->url_as_parts[0] : $config['default_controller']; 
    $method = isset($this->url_as_parts[1]) ? $this->url_as_parts[1] : "index"; 
    $parms = isset($this->url_as_parts[2]) ? $this->url_as_parts[2] : ""; 

    if (!class_exists($class)) { 
     trigger_error("The class {$class} not exists <br/>"); 
     exit; 
    } 
    $controller = Object::get($class); 
    if (!method_exists($controller, $method)) { 
     header('HTTP/1.0 404 Not Found'); 
     include(SYSTEM_PATH . "languages/" . $config['system_language'] . "/errors/404_not_found.html"); 
     exit;   
    } 

    if (empty($parms)) { 
     $controller->{$method}(); 
    } else { 
     $parms_array = array_slice($this->url_as_parts, 2); 
     call_user_func_array(array($controller, $method), $parms_array); 
    } 
} 

Следующая строка не выводится сообщение об ошибке и правильный путь require_once (APP_PATH . "config/config.php");, но я не могу доступ $config['system_language'], который находится внутри файла config.php.

Обратите внимание, что когда я меняю require_once на require или include, все в порядке.

+0

Потому что вы используете функцию дважды и на все времена после первого этого файла, который не включен? –

+0

Baybe вы включили его один раз и перезаписываете значения '$ config' где-то еще в вашем коде –

+1

О, Он внутри функции ... Выполняет' global $ config; 'внутри функции или передает' $ config' в качестве параметра к функции –

ответ

0

Может быть, что-то еще содержит config/config.php, а затем переопределяет/перезаписывает переменную $config?

Разница между require_once() и обычными аналогами (include() и т. Д.) Заключается в том, что require_once() включает (и выполняет, если применимо) что-то, если оно не было включено ранее.

0

Возможно, это связано с тем, что вы уже загрузили конфигурацию/config.php где-то раньше в своем коде. Вызов require_once(APP_PATH . "config/config.php"); проверяет, что файл config.php уже включен и, следовательно, не включает его внутри этой функции. Именно поэтому ваша функция не имеет доступа к переменной $config.

Надеюсь, что это поможет.

1

Как происходит из require_once описания - файл требуется только один раз

Любой другой require_once этого файла работать не будет работу.

И, очевидно, вы используете функцию ParseURL не один раз. Итак, ваш require_once не работает во втором и последовательном звонках.

Таким образом, вы можете использовать только require или, поскольку я вижу, что это часть класса, создайте, например, метод-обертку, который присвойт config данные вашей переменной класса. То есть:

public function getConfig() 
{ 
    $this->config = require_once('FILE'); 
} 

В этом случае ваш конфигурационный файл должен возврат массив или объект конфигурации переменных.

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