var для класса в PHP

Я использую класс PHP для входа в систему. База данных MySQL, которую процесс входа проверяет для пользователя, определяется следующим образом:

    class flexibleAccess{

  var $dbName = 'mydatabase';

Однако, поскольку я устанавливаю приложение для разных людей, это $dbName требует постоянных изменений. Я решил создать файл конфигурации, в котором я храню информацию о своей базе данных, поэтому мне придется изменить его, ведь это проще, поскольку этот класс входа где-то «спрятан». Проблема в том, что я хочу сделать что-то вроде этого:

class flexibleAccess{

      var $dbName = $_SESSION['mydatabase'];

И я получаю сообщение об ошибке: «Ошибка синтаксического анализа: ошибка синтаксического анализа в path/access.class.php в строке 43». Строка 43 — это строка с $dbName... Почему я не могу использовать это динамически получать мои значения из сеанса? И как мне его использовать?

Спасибо


person Manny Calavera    schedule 18.01.2009    source источник


Ответы (4)


Сделайте это в конструкторе (здесь я предполагаю, что php5 ...)

class flexibleAccess{

   private $dbName;

   function __construct() {
         $this->dbName = $_SESSION['mydatabase'];
   }
}

Для php4 замените __construct именем класса.

person Paul Dixon    schedule 18.01.2009
comment
этот код предполагает, что ваше имя базы данных всегда будет исходить из сеанса. для меня выглядит жестко запрограммированным. почему бы не передать его как параметр n конструктору - person Gabriel Sosa; 18.01.2009
comment
ОП хотел этого на сеансе, вот что я продемонстрировал. - person Paul Dixon; 18.01.2009

Вероятно, вам не следует помещать конфигурацию базы данных в сеанс. Мне это кажется немного рискованным.

Я бы создал файл конфигурации с информацией и включил его в константу:

dbconfig.php:

constant("DBNAME", 'mydatabase');

гибкий доступ.php:

require_once 'dbconfig.php';

class flexibleAccess {
  private $dbname;

  // set the default database name to the constant DBNAME
  // but allow override
  public function __construct ( $dbname = DBNAME )
  {
    $this->dbname = $dbname;
  }
}

Любые файлы, которым требуется доступ к базе данных:

require_once 'flexibleaccess.php';

$db = new flexibleaccess();

Конечно, вам не нужно устанавливать его как константу. Суть в том, что вы помещаете конфигурацию в отдельный файл из своего кода.

person Gary Richardson    schedule 18.01.2009
comment
Определенно прав; помещать эту информацию в сессию - просто глупость. - person DreamWerx; 18.01.2009

Вы должны назначить эту переменную в конструкторе класса как PHP 4 допускает только константу значения в качестве инициализаторов:

В PHP 4 разрешены только константные инициализаторы для переменных var. Чтобы инициализировать переменные с непостоянными значениями, вам нужна функция инициализации, которая вызывается автоматически, когда объект создается из класса. Такая функция называется конструктором (см. ниже).

person Gumbo    schedule 18.01.2009

В качестве альтернативы вы можете указать, откуда класс должен считывать эту информацию при вызове класса, например:

<?php
$login = new flexibleAccess();
$login->dbName = $_SESSION['mydatabase'];
?>

Таким образом, ваш класс остается чистым и может принимать имя базы данных (и любую другую информацию, которая может отличаться) из любого источника или метода, который вы предпочитаете. В качестве дополнительного бонуса вам не нужно обращать внимание на то, какую версию PHP вы используете, он будет работать в обеих версиях.

Надеюсь это поможет!

-Дэйв

person Community    schedule 18.01.2009
comment
Я вижу, что за мой ответ проголосовали против, этот метод не рекомендуется? Если это так, я хотел бы знать, чтобы я мог извлечь из этого уроки. Спасибо! - person ; 19.01.2009
comment
Вы не помещаете базы данных в сеансы, вы помещаете их в конфиги, как сказал Гэри. - person MrHus; 13.05.2009
comment
..который не имеет ничего общего с данным ответом. Я ответил на вопрос о том, как установить эти переменные, а не о том, хорошо ли использовать сеансы для сохранения информации о вашей базе данных или нет. - person ; 14.05.2009