php classe: проблема с получением значения из функции в переменную-член - PullRequest
0 голосов
/ 21 июня 2010

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

Parse error: parse error, expecting `','' or `';'' in I:\wamp\www\deposit\classes\Site.php on line 14

Эта строка вызывает ошибку

public static $depositmoney = self::get_balance();

И эта функцияполучает значение из базы данных

    public static function get_balance()
    {
        global $link, $usertable, $userid, $useridentify;

        //query current balance
        $cb = mysqli_fetch_object(mysqli_query($link, "SELECT deposit FROM ".$usertable." WHERE ".$userid."=".$useridentify.""));
        return $cb->deposit;

    }//end of function get_balance().

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

1 Ответ

3 голосов
/ 21 июня 2010

Свойства класса не могут быть объявлены с информацией времени выполнения.

public static $depositmoney = self::get_balance();

Выше не будет работать.

См. Руководство по PHP для свойств класса: (выделено мной)

Переменные-члены класса называются «свойствами». Вы также можете видеть, что они упоминаются с использованием других терминов, таких как «атрибуты» или «поля», но для целей данной ссылки мы будем использовать «свойства». Они определяются с использованием одного из ключевых слов public, protected или private, за которым следует обычное объявление переменной. Это объявление может включать в себя инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть в состоянии быть оцененной во время компиляции, и не должна зависеть от информации времени выполнения для оценки,

Вы можете создать метод получения для $depositmoney и инициализировать значение, если оно в данный момент не установлено:

public static function getDepositMoney()
{
    if(self::$depositmoney === NULL) {
        self::$depositmoney = self::get_balance();
    }
    return self::$depositmoney;
}

Однако я предлагаю избавиться от static и вместо этого использовать методы и свойства экземпляра для отслеживания состояния. Вы также захотите избавиться от вещей global и внедрить зависимости через конструктор, установщики или во время вызова метода. Это уменьшает сцепление и делает код более понятным.

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