Я ожидаю, что это будет основной синтаксической ошибкой, которую я забыл, но я не могу понять это.
В PHP-скрипте я продолжаю получать следующую ошибку.
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in [path]/scripts/users/database_connection.php on line 4
Это происходит, когда мой скрипт для подключения к базе данных вызывается с include_once()
. Я разделил свой сценарий на самый базовый код (оставляя то, что требуется другим кодом), и он все еще вызывает эту ошибку.
<?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); }
публиковать, защищать или закрывать до подключения $.