变量未被提取

时间:2013-12-04 21:09:47

标签: php

在我的config.php文件中,我有一个设置为'localhost'的变量。

 $CONFIG['MySQLi']['host'] = "localhost";

但是,当我在我的数据库类中包含这个config.php时,我通过__construct()方法调用echo中的变量来测试它

 public function __construct() {
      echo $CONFIG['MySQLi']['host'];
 }

但由于某种原因,我收到了这个错误:

 Notice: Undefined variable: CONFIG in C:\xampp\htdocs\Muse\classes\class.database.php on line 15

但是我没有输入config.php文件的错误。有人能够解释为什么会这样吗?三江源

3 个答案:

答案 0 :(得分:4)

该函数不知道由于variable scope而在外部定义的变量。

public function __construct() {
    global $CONFIG;

}

应该解决这个问题。但是,这通常被认为是不好的做法。


或者,您可以使用Kohjah Breese所示的静态属性,将配置数组传递给构造函数(如 AlexP 所示)或使用如下所示的构造。

/config/mysqli.php

<?php
return array(
   //what now is $CONFIG['MySQLi']
);

并在函数中

public function __construct() {
    $config = include '/config/mysqli.php';
}

答案 1 :(得分:1)

对于仍然想要回答这个问题的人来说,另一个好方法是通过定义一个变量。

define('VARIABLE', 'VALUE');

然后通过VARIABLE调用它。 E.g。

<?php echo VARIABLE; ?>

答案 2 :(得分:0)

如上所述,函数无法访问存储在它们之外的标准变量,但更好的解决方案是创建一个要存储全局变量的类。我使用类似这样的东西:

class Conf 
{ 

    // Project
    static $CODE = 'F';
    static $NAME = 'For';
    static $ACCESS = 'public';
    static $CHARSET = 'utf-8';
    static $DATA = array();
    static $CACHE = false;
    static $HTMLINDENT = true;

    // Diagnostic
    static $SHOWEXECTIME = true;

    // Paths
    static $PATH_FILESYSTEM = '';
    static $PATH_CORE = '/var/www/sites/core';
    static $PATH_DOMAIN = 'localhost';
    static $PATH_URL = 'http://localhost/sites/for/';
    static $PATH_CACHE = 'cache/';
    static $PATH_CSS = 'css/';
    static $PATH_DATA = 'data/';
    static $PATH_JS = 'js/';
    static $PATH_LOG = 'logs/';
    static $PATH_XML = 'xml/';
    static $PATH_XSL = 'xsl/';

    // DB Details
    static $DB_USER = 'root';
    static $DB_PASS = 'pass';
    static $DB_DSN = 'mysql:host=localhost;dbname=for;charset=utf8';

}

我的测试显示这是最快的解决方案。有些人使用非常慢的常量。全球已被折旧,存在安全风险。

您可以使用Conf :: $ NAME从PHP中的任何位置访问任何这些变量;等