变量未被提取

In my config.php file I have a variable that is set to 'localhost'.

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

However, when I include this config.php in my database class, I test it by calling the variable in an echo through the __construct() method

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

But then for some reason, I get this error:

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

However I get no errors for importing the config.php file. Would someone be able to explain why this is happening? Thankyou

For anybody who still wants the answer to this question, another good way to do it is by DEFINING a variable.

define('VARIABLE', 'VALUE');

And then call it by doing VARIABLE. E.g.

<?php echo VARIABLE; ?>

The function doesn't know about variables that were defined outside due to variable scope.

public function __construct() {
    global $CONFIG;

}

should resolve this. However, this is usually considered bad practice.


Alternatively you can use static attributes as shown by Kohjah Breese, pass the config array to the constructor (as suggested by AlexP) or use a construct like the following.

/config/mysqli.php

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

and in the function

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

AS above, function do not have access to standard variables stored outside of them, but a better solution is to create a class you want to store global variables in. I use something like this:

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';

}

My tests showed this to be the quickest solution. Some people use constants, which are very slow. Globals have been depreciated, and are a security risk.

You can access any of these vars from anywhere in PHP using Conf::$NAME; etc.