PHP中来自必需/包含文件的变量变量

Posted

技术标签:

【中文标题】PHP中来自必需/包含文件的变量变量【英文标题】:Variable Variables in PHP from required / included files 【发布时间】:2012-06-12 09:03:38 【问题描述】:

我正在编写一个 MVC 框架(目的是学习和发现,而不是真正打算使用它)并且遇到了一个小问题。

我有一个config.php 文件:

$route['default'] = 'home';

$db['host'] = 'localhost';
$db['name'] = 'db-name';
$db['user'] = 'user-name';
$db['pass'] = 'user-pass';

$enc_key = 'enc_key'

我通过 boot 类中的静态方法加载这些:

public static function getConfig($type) 
    /**
     * static getConfig method gets configuration data from the config file
     *
     * @param string $type - variable to return from the config file.
     * @return string|bool|array - the specified element from the config file, or FALSE on failure
     */
    if (require_once \BASE . 'config.php') 
        if (isset($$type)) 
            return $$type;
         else 
            throw new \Exception("Variable '$type' is undefined in " . \BASE . "config.php");
            return FALSE;
        
     else 
        throw new \Exception("Can not load config file at: " . \BASE . 'config.php');
        return FALSE;
    

然后像这样加载路线:

public function routeURI($uri) 
    ...
    $route = $this::getConfig('route');
    ...

捕获异常:

"Variable 'route' is undefined in skeleton/config.php"

现在,如果我像这样制作config.php 文件,它工作正常

$config['route']['default'] = 'home'
...

并像这样更改方法中的两行:

if (isset($config[$type])) 
        return $config[$type];

我也尝试过使用$$type 代替$$type 来解决同样的问题。

有什么我忽略的吗?

【问题讨论】:

【参考方案1】:

正如所写,这个函数只能被调用一次,因为它使用require_once 并且在随后的调用中你不会再引入在config.php 中定义的局部变量。我怀疑您在第二次致电 getConfig() 时遇到此错误。

【讨论】:

我的立场是正确的,我将其更改为“要求”并且它有效,对不起! 好吧,将这个男人的答案标记为正确!此外,病态添加不需要函数中的文件。在函数之外需要它并将配置作为参数传递。 原来需要index.php页面中的文件,不知道为什么还是不做,估计是在尝试新东西吧! 由于我使用命名空间,我意识到我不需要 index.php 文件中的文件的原因是我无法访问类中的变量,因为它位于不同的命名空间中使用$GLOBALS[$type] 快速修复的索引文件,感觉有点乱,但我想它完成了工作。

以上是关于PHP中来自必需/包含文件的变量变量的主要内容,如果未能解决你的问题,请参考以下文章

NSString 中的必需字符替换为编码变量

02-php基础知识

PHP包含文件中的未定义变量错误[重复]

如何在其中包含 html 的 php 文件中写入变量?

PHP - 包含文件而不继承变量?

给 PHP 包含()的文件父变量范围