我正在声明一个包含一系列预处理语句的简单数据库类,但对于我的生活,我在这里找不到语法错误。
class Database {
private static $users_table = "users";
private static $statements = array("username_available" => "SELECT COUNT(*) FROM " . self::$users_table . " WHERE Username='?'");
}
这里有任何帮助吗?
答案 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=?");
}
}
?>