PHP переменные имеют нулевые значения - PullRequest
1 голос
/ 22 июля 2009

У меня есть некоторая информация о базе данных, хранящаяся в config.inc.php, и я пытаюсь использовать ее для доступа к базе данных в моем классе, но по какой-то причине переменные являются нулевыми вот код:

<?php

require_once 'dbinterface.php';
require_once 'config.inc.php';

class user {

    ...

    function user($id) {
        $this->db = new db($DB['host'], $DB['user'], $DB['pass'], $DB['database']);
        ...
    }
...
?>

и вот config.inc.php:

<?php

$DB['host'] = '192.168.1.107';
$DB['user'] = '****';
$DB['pass'] = '****';
$DB['database'] = 'qa';

?>

Я не уверен, почему я получаю нулевые значения, но вот мое доказательство:

Неустранимая ошибка: необработанное исключение «Исключение» с сообщением «Нет базы данных выбранный в D: \ развитие \ PHP \ QandA \ dbinterface.php: 18 Трассировка стека: # 0 D: \ развитие \ PHP \ QandA \ user.class.php (17): db-> db (NULL, NULL, NULL, NULL) # 1 D: \ развитие \ PHP \ QandA \ log.php (17): user-> user ('1') # 2 {main} D: \ развитие \ PHP \ QandA \ dbinterface.php по линии 18

Ответы [ 5 ]

4 голосов
/ 22 июля 2009

Вы должны объявить $DB как global, чтобы это работало:

global $DB;

$DB['host'] = '192.168.1.107';
$DB['user'] = '****';
$DB['pass'] = '****';
$DB['database'] = 'qa';

А в вашем определении класса:

function user($id) {
        global $DB;
        $this->db = new db($DB['host'], $DB['user'], $DB['pass'], $DB['database']);
        ...
    }
3 голосов
/ 22 июля 2009

У вас переменная область видимости . Если ваш файл config.inc включен в глобальный контекст, то это должно работать:

function user($id) {
    global $DB;
    $this->db = new db($DB['host'], $DB['user'], $DB['pass'], $DB['database']);
    ...
}
1 голос
/ 22 июля 2009

Как правило, использование глобальных переменных - плохая идея. В этом случае это работает, но это не оптимально. Лучшая идея - использовать определения.

define('DB_HOST', '192.168.1.107');
define('DB_USER', '****');
define('DB_PASS', '****');
define('DB_DATABASE', 'qa');

...

function user($id) {
    $this->db = new db(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
    ...
}
1 голос
/ 22 июля 2009

Вы включаете файлы вне области видимости класса. Если вы переместите требование внутрь функции, она будет работать как положено.

Лучшим вариантом будет включить его в конструктор, выполнить цикл по массиву $DB и присвоить его значения $this->DB, чтобы вы могли получить к нему доступ в любой функции вашего класса. Вам также нужно будет изменить ваши функции, чтобы использовать $this->DB вместо $DB.

function __construct() {
    require_once 'dbinterface.php';
    $this->DB = array();
    foreach ($DB as $key => $value) {
        $this->DB[$key] = $value;
    }
}
0 голосов
/ 22 июля 2009

Посетите страницу справки PHP о переменной области действия и, в частности, ключевое слово "globals". Это должно дать вам то, что вам нужно. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...