Я использую класс PHP для входа в систему. База данных MySQL, которую процесс входа в систему проверяет для пользователя, определяется следующим образом:
class flexibleAccess{
var $dbName = 'mydatabase';
Однако, поскольку я устанавливаю приложение для разных людей, это $ dbName требует постоянных изменений. Я решил создать файл конфигурации, в котором я храню информацию о моей базе данных, поэтому мне придется изменить его, ведь это проще, поскольку этот класс входа в систему где-то «спрятан». Проблема в том, что я хочу сделать что-то вроде этого:
class flexibleAccess{
var $dbName = $_SESSION['mydatabase'];
И я получаю сообщение об ошибке: «Ошибка синтаксического анализа: ошибка синтаксического анализа в дорожка / access.class.php в строке 43». Строка 43 - это строка с $ dbName ... Почему я не могу использовать это для динамического получения значений из сеанса? И как мне его использовать?
Спасибо






Сделайте это в конструктор (я предполагаю, что здесь php5 ...)
class flexibleAccess{
private $dbName;
function __construct() {
$this->dbName = $_SESSION['mydatabase'];
}
}
Для php4 замените __construct именем класса.
OP хотел, чтобы это было сделано во время сеанса, и я это продемонстрировал.
Вы должны назначить эту переменную в конструкторе класса как 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 вы используете, она будет работать в обеих.
Надеюсь это поможет!
-Дэйв
Я вижу, что мой ответ был отклонен, этот метод не рекомендуется? Если да, то я хотел бы знать, чтобы я мог извлечь уроки из этого. Спасибо!
Вы не размещаете базы данных в сессиях, вы помещаете их в конфигурации, как сказал Гэри.
..который не имеет ничего общего с данным ответом. Я ответил на вопрос о том, как установить эти переменные, а не о том, было ли использование сеансов для сохранения информации о вашей базе данных хорошим или нет.
Вероятно, вам не следует вводить конфигурацию базы данных в сеанс. Мне это кажется немного рискованным.
Я бы создал файл конфигурации с информацией и включил бы его с константой:
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();
Конечно, вам не нужно устанавливать его как константу. Ключ в том, что вы помещаете конфигурацию в отдельный файл от вашего кода.
Определенно верно; размещать эту информацию в сеансе - чистая глупость.
этот код предполагает, что имя вашей базы данных всегда будет происходить из сеанса. для меня выглядит жестко запрограммированным. почему бы не передать его как параметр в конструкторе