web-dev-qa-db-ja.com

予期しないT_VARIABLE、T_FUNCTIONが必要です

これは私が見落としていた基本的な構文エラーであると期待していますが、理解できません。

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

私はしばらくこれに苦労してきましたが、他の誰かが私が間違った場所を見つけることができるかどうか疑問に思いました。

20
Ryan Leonard

入れられない

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

クラス構築の外。その行を関数またはコンストラクター内に配置する必要がありますが、現在の場所に配置することはできません。

22
Sabeen Malik

クラス構築では関数呼び出しを使用できません。コンストラクター関数でその値を初期化する必要があります。

クラスプロパティの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。これにより、誤って接続を閉じたり、接続を乱したりすることがなくなります。

18
Lekensteyn

$ connectionの前にpublic、protected、またはprivateを配置します。

4
Stijn Leenknegt