我正在声明一个简单的数据库类,其中包括一个准备好的语句数组,但是对于我的生命,我在这里找不到语法错误。
class Database {
private static $users_table = "users";
private static $statements = array("username_available" => "SELECT COUNT(*) FROM " . self::$users_table . " WHERE Username='?'");
}
有什么帮助吗?
您不应该在参数的?
周围加上引号。另外,不能将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...
}
}
在类变量声明中赋值时不能连接:只能赋一个标量值或另一个数组(如果我没记错的话,也可以赋一个对象)。
可以将表达式赋值到方法中,比如类构造函数,或者另一个静态方法
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=?");
}
}
}
这段代码应该在你的情况下工作。正如Michael所说,你应该去掉问号周围的引号
我不认为PHP喜欢通过连接声明静态类变量或其他需要计算的方法。也不能将静态变量设置为函数调用的结果:
private static $time = time(); # this will fail too. Value must be a literal value
换句话说,类定义中的属性值不能来自已求值的对象。
所以你必须硬编码$users_table
字符串的值到$statements
:
private static $statements = array("username_available" => "SELECT COUNT(*) FROM `users` WHERE Username=?");
设置类属性时需要求值,因此出现问题。
这是因为PHP类属性"必须能够在编译时求值,并且必须不依赖于运行时信息才能求值"。参见前面链接页面上的示例。
为了保持相同的格式,您可以使用一个静态方法,它只返回您想要的值:
<?php
class Database {
private static $users_table = "users";
private static function statements() {
return array("username_available" =>
"SELECT COUNT(*) FROM " . self::$users_table . " WHERE Username=?");
}
}
?>
工作示例