2011-07-31 58 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