2013-12-04 2 views
0

В моем файле config.php у меня есть переменная, которая установлена ​​на «localhost».Переменная не подбирается

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

Однако, когда я включил этот config.php в моем классе базы данных, я могу проверить его, вызывая переменную в эхо с помощью метода __construct()

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. Кто-нибудь сможет объяснить, почему это происходит? Thankyou

ответ

1

Для любого, кто все еще хочет ответить на этот вопрос, другой хороший способ сделать это - ОПРЕДЕЛЕНИЕ переменной.

define('VARIABLE', 'VALUE'); 

А затем назовите его, выполнив ПЕРЕМЕННЫЕ. Например.

<?php echo VARIABLE; ?> 
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'; 
} 
+0

Блестящий! Спасибо, я помету ваш вопрос правильно, когда он позволит мне – Jarrod

+3

+1 В качестве другого варианта вы можете передать его как аргумент функции '__construct ($ config)' – AlexP

+0

@AlexP, я добавил еще одну возможность – kero

0

AS выше, функция не имеют доступа к стандартным переменным хранящимся вне их, но лучшее решение заключается в создании класса, в котором вы хотите хранить глобальные переменные. Я использую что-то вроде этого:

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

} 

Мои тесты показали, что это самое быстрое решение. Некоторые люди используют константы, которые очень медленные. Глобалы обесценились и представляют собой угрозу безопасности.

Вы можете получить доступ к любому из этих vars из любого места PHP, используя Conf :: $ NAME; и т. д.

Смежные вопросы