【问题标题】:unexpected T_VARIABLE, expecting T_FUNCTION意外的 T_VARIABLE,期待 T_FUNCTION
【发布时间】:2011-09-23 02:52:54
【问题描述】:

我预计这是我忽略的基本语法错误,但我无法弄清楚。

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

我已经为此苦苦挣扎了一段时间,只是想知道是否有其他人能发现我出错的地方。

【问题讨论】:

    标签: php sqlite syntax-error


    【解决方案1】:

    你不能放

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

    在类构造之外。您必须将该行放在函数或构造函数中,但不能将其放在现在的位置。

    【讨论】:

    • @Rhino ,没错。 @Lekensteyn 做得很好,向您展示了理想情况下应该如何做。
    • 反对合并术语 functionmethod,并且不能在类构造函数之外进行预设赋值。
    【解决方案2】:

    你不能在类构造中使用函数调用,你应该在构造函数中初始化那个值。

    来自PHP Manual on class properties

    这个声明可能包含一个初始化,但是这个初始化必须是一个常数值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息顺序进行评估。

    工作代码示例:

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

    根据您的需要,protectedprivate 可能是$connection 的更好选择。这可以防止您意外关闭或弄乱连接。

    【讨论】:

      【解决方案3】:

      在成员定义前使用访问修饰符:

          private $connection;
      

      由于你不能在 PHP 的成员定义中使用函数调用,所以在构造函数中进行:

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

      【讨论】:

        【解决方案4】:

        在 $connection 之前放置 public、protected 或 private。

        【讨论】:

        • 为什么需要它?
        【解决方案5】:

        检查您是否输入了带有“$”符号的变量作为参数

        【讨论】:

          【解决方案6】:

          我们应该只将我们的内容保存在公共/私有函数中。我们可以将内容保留在函数之外。

          【讨论】:

            猜你喜欢
            • 2013-12-25
            • 2013-12-15
            • 2014-05-20
            • 2012-05-11
            • 1970-01-01
            • 1970-01-01
            • 2010-11-20
            • 2017-04-08
            • 2011-07-23
            相关资源
            最近更新 更多