'需要'工作,但' require_once'不起作用

时间:2016-06-19 14:27:01

标签: php

当我使用usersrequire_once来包含文件时,它不起作用,而当我使用include_oncerequire时,它可以正常工作。

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_oncerequire时,一切正常。

3 个答案:

答案 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变量的原因。

希望有所帮助。