2011-07-31 54 views
0

我声明了一个简单的数据库类,其中包含一个准备好的语句数组,但对于我来说,在这里我找不到语法错误。php数据库类中的静态数组声明 - 错误的语法错误?

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

这里有什么帮助吗?

回答

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... 
    } 

} 
+0

我使用这个类作为一个静态类,所以深得没有任何实例化。我是否应该在使用它的函数中声明它? –

+0

@pythonscript是的,只是在将使用它的函数中创建它。 –

+0

@pythonscript - 或者只是把'$ statements'改成一个返回数组的方法(参见我的回答),并使用它与命令['self :: statements()'](http://codepad.viper- 7.com/NJsXO5) –

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=?"); 
     } 
    } 
} 

此代码应工作你的情况另一个静态方法。正如Michael所说,你应该删除问号周围的引号。

+0

感谢您的帮助;我想我会用isset,但重点是一样的。再次感谢! –

0

我不认为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=?"); 
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