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

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

    class flexibleAccess{

  var $dbName = 'mydatabase';

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

class flexibleAccess{

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

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

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 423
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

class flexibleAccess{

   private $dbName;

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

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

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

Gabriel Sosa 18.01.2009 19:30

OP хотел, чтобы это было сделано во время сеанса, и я это продемонстрировал.

Paul Dixon 18.01.2009 20:01

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

In PHP 4, only constant initializers for var variables are allowed. To initialize variables with non-constant values, you need an initialization function which is called automatically when an object is being constructed from the class. Such a function is called a constructor (see below).

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

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

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

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

-Дэйв

Я вижу, что мой ответ был отклонен, этот метод не рекомендуется? Если да, то я хотел бы знать, чтобы я мог извлечь уроки из этого. Спасибо!

user50384 19.01.2009 07:53

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

MrHus 13.05.2009 13:04

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

user50384 14.05.2009 05:22

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

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

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

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

Определенно верно; размещать эту информацию в сеансе - чистая глупость.

DreamWerx 18.01.2009 23:14

Другие вопросы по теме