php数据库类中的静态数组声明 - 语法错误?

时间:2011-07-31 19:56:30

标签: php syntax-error

我正在声明一个包含一系列预处理语句的简单数据库类,但对于我的生活,我在这里找不到语法错误。

class Database {
    private static $users_table = "users";
    private static $statements = array("username_available" => "SELECT COUNT(*) FROM " . self::$users_table . " WHERE Username='?'");
}

这里有任何帮助吗?

4 个答案:

答案 0 :(得分:1)

您的参数?周围不应有引号。此外,您不能将private static $statements声明为数组。相反,您必须在构造函数中初始化它。

class Database {
    private static $users_table = "users";
    private static $statements;

    public function __construct() {
      $this->statements = array("username_available" => "SELECT COUNT(*) FROM " . self::$users_table . " WHERE Username='?'");
      // etc...
    }

}

答案 1 :(得分:0)

在类变量声明上赋值时你不能连接:你只能指定一个标量值或另一个数组(如果我没记错的话,还可以指定一个对象)。

您可以将表达式分配给方法,如类构造函数,或者可能是另一种静态方法

class Database {
    private static $users_table = "users";
    private static $statements = null;
    public function __construct(){
        if(self::$statements === null){
            self::$statements = array("username_available" => "SELECT COUNT(*) FROM " . self::$users_table . " WHERE Username=?");
        }
    }
}

此代码适用于您的情况。正如迈克尔所说,你应该删除问号周围的引号。

答案 2 :(得分:0)

我不认为PHP喜欢从连接声明静态类变量或者需要评估。您不能将静态变量设置为函数调用的结果:

private static $time = time(); # this will fail too. Value must be a literal value

换句话说,类定义中的propety值不能来自已评估的内容。

所以你必须将$users_table字符串的值硬编码到$statements

private static $statements = array("username_available" => "SELECT COUNT(*) FROM `users` WHERE Username=?");

答案 3 :(得分:0)

由于在设置类属性时需要进行评估,您遇到了问题。

这是因为PHP类属性"must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated."。请参阅先前链接页面上的示例。

要保持相同的格式,您可以使用静态方法,只返回所需的值:

<?php
class Database {
    private static $users_table = "users";
    private static function statements() {
           return array("username_available" => 
                 "SELECT COUNT(*) FROM " . self::$users_table . " WHERE Username=?");
    }
}
?>

Working example