当我使用users
或require_once
来包含文件时,它不起作用,而当我使用include_once
或require
时,它可以正常工作。
include
以下行不会产生错误且路径正确
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
时,一切正常。
答案 0 :(得分:1)
来自require_once
说明 - 文件只需一次
此文件的任何其他require_once
不会工作。
你显然不止一次地运行你ParseURL
。所以,你的require_once
没有处理第二次和连续的电话。
所以,你可以只使用require
或者,因为我看到这是一个类的一部分,例如,创建一个包装器方法,它将config
数据分配给你的类变量。即:
public function getConfig()
{
$this->config = require_once('FILE');
}
在这种情况下,您的配置文件应该返回数组或配置变量的对象。
答案 1 :(得分:0)
可能是其他内容包含config/config.php
,然后重新定义/覆盖变量$config
?
require_once()
和常规对应(include()
等)之间的差异是require_once()
仅包括(并执行,如果适用)某些内容(如果之前未包含的话)。
答案 2 :(得分:0)
这可能是因为您已经在代码中的某处加载了config / config.php。
调用require_once(APP_PATH . "config/config.php");
检查文件config.php是否已包含在内,因此不包含在该函数内。
这就是您的函数无法访问$config
变量的原因。
希望有所帮助。