Неожиданный T_VARIABLE, ожидающий T_FUNCTION

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

В 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;
?>

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

Ответы

Ответ 1

Вы не можете поставить

$connection = sqlite_open("[path]/data/users.sqlite", 0666);

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

Ответ 2

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

Из руководства 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. Это защищает вас от случайного закрытия или взаимодействия с подключением.

Ответ 3

Используйте модификатор доступа до определения члена:

    private $connection;

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

 public function __construct() {
      $this->connection = sqlite_open("[path]/data/users.sqlite", 0666);
 }

Ответ 4

поставить public, protected или private перед $connection.