var для класса в PHP - PullRequest
       14

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

0 голосов
/ 18 января 2009

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

    class flexibleAccess{

  var $dbName = 'mydatabase';

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

class flexibleAccess{

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

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

Спасибо

Ответы [ 4 ]

4 голосов
/ 18 января 2009

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

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

dbconfig.php:

constant("DBNAME", 'mydatabase');

flexibleaccess.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();

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

3 голосов
/ 18 января 2009

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

class flexibleAccess{

   private $dbName;

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

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

1 голос
/ 18 января 2009

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

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

0 голосов
/ 18 января 2009

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

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

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

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

-Dave

...