PHP глобальный объект - PullRequest
       18

PHP глобальный объект

0 голосов
/ 24 марта 2011

У меня есть объект базы данных шаблона Singleton, который я хотел бы объявить один раз для использования в системе. У меня есть основной включаемый файл, который обслуживает все отдельные файлы классов, а также создает некоторые глобальные переменные.

Вот включаемый файл:

<?php
// Main API. We want to include everything here and then make some Global Vars:
require_once('database.class.php');

// Create the DB here:
$database = Database::Singleton();

require_once('user.class.php');
require_once('settings.class.php');

// Start the session:
session_start();
?>

Теоретически, $database должна быть глобальной переменной, доступной для всего, что будет включено после этого (т. Е. user.class.php и settings.class.php. Однако, когда я пытаюсь вызвать метод в классе Database из класса User следующим образом:

$result = $database->FetchObject($queryString);

Я получаю следующую ошибку:

Неустранимая ошибка: вызов функции-члена NumRows () для необъекта в C: \ Program Files (x86) \ EasyPHP-5.3.4.0 \ www \ PC Estimating \ classes \ user.class.php по линии 122

Кто-нибудь может помочь?

Ответы [ 2 ]

4 голосов
/ 24 марта 2011

Если вы пытаетесь использовать объект $database внутри метода класса, вы должны использовать ключевое слово global, чтобы переменная $database была видна из метода:

class User {
    function myMethod() {
        global $database;

        // Work with $database

    }
}


Для получения дополнительной информации обратитесь к разделу Variable данного руководства.


Другое решение (лучше) , учитывая, что вы используете синглтон, было бы получить этот объект из синглтона:

class User {
    function myMethod() {
        $database = Database::Singleton();

        // Work with $database

    }
}
1 голос
/ 24 марта 2011

Какой остальной твой код? В частности в user.class.php и settings.class.php. Если вы хотите использовать $ database в одном из методов вашего класса, вам нужно либо включить global $database; в начале метода (это плохо, не делайте этого), либо полагаться на поведение и использование синглтона $database = Database::Singleton(); снова. Если синглтон настроен правильно, это должно относиться к тому же экземпляру, который вы изначально создали.

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