Ответ 1
Вы не можете поставить
$connection = sqlite_open("[path]/data/users.sqlite", 0666);
вне конструкции класса. Вы должны поместить эту строку внутри функции или конструктора, но вы не можете разместить ее там, где у вас есть.
Я ожидаю, что это будет основной синтаксической ошибкой, которую я пропустил, но я не могу понять.
В PHP script я продолжаю получать следующую ошибку.
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in [path]/scripts/users/database_connection.php on line 4
Это происходит, когда мой script для подключения к базе данных вызывается с помощью include_once()
. Я разделил свой script на самый базовый код (оставив в том, что требуется другим кодом), и он все еще вызывает эту ошибку.
<?php
class UserDatabaseConnection
{
$connection = sqlite_open("[path]/data/users.sqlite", 0666);
public function lookupUser($username)
{
// rest of my code...
}
}
$udb = new UserDatabaseConnection;
?>
Я боролся с этим какое-то время и просто задавался вопросом, может ли кто-нибудь еще где-нибудь обнаружить, что я ошибся.
Вы не можете поставить
$connection = sqlite_open("[path]/data/users.sqlite", 0666);
вне конструкции класса. Вы должны поместить эту строку внутри функции или конструктора, но вы не можете разместить ее там, где у вас есть.
Вы не можете использовать вызовы функций в построении класса, вы должны инициализировать это значение в функции конструктора.
Из руководства PHP по свойствам класса:
Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения в для оценки.
Пример рабочего кода:
<?php
class UserDatabaseConnection
{
public $connection;
public function __construct()
{
$this->connection = sqlite_open("[path]/data/users.sqlite", 0666);
}
public function lookupUser($username)
{
// rest of my code...
// example usage (procedural way):
$query = sqlite_exec($this->connection, "SELECT ...", $error);
// object oriented way:
$query = $this->connection->queryExec("SELECT ...", $error);
}
}
$udb = new UserDatabaseConnection;
?>
В зависимости от ваших потребностей protected
или private
может быть лучшим выбором для $connection
. Это защищает вас от случайного закрытия или взаимодействия с подключением.
Используйте модификатор доступа до определения члена:
private $connection;
Поскольку вы не можете использовать вызов функции в определении члена в PHP, сделайте это в конструкторе:
public function __construct() {
$this->connection = sqlite_open("[path]/data/users.sqlite", 0666);
}
поставить public, protected или private перед $connection.