2013-03-31 45 views
-1

我一直在試驗來自類構造的持久化數據,我試圖通過公共__construct建立持久連接,所以我可以在我的課程中使用我的數據庫連接信息。我的代碼如下:訪問類中的數據庫構造

class Inbox { 
    # private $Database; 
    public function __construct() { 
     $this->$Database = new mysqli ('localhost','root','xxx','test'); 
    } 
    public static function TestConnect(){ 
     if (self::Database){ 
      echo "Success When Connecting To Database"; 
     }else{ 
      echo "Problems When Connecting To Database"; 
     } 
    } 
    public static function TestSelect(){ 
     $Select = $this->Database->prepare("SELECT * FROM test"); 
     $Select->execute(); 
     $Select->bind_result($Test_ID, $Test_UName); 
     $Select->fetch(); 

     print_r($Select); 
    } 
} 

$Foo = new Inbox(); 
$Foo->TestSelect(); 

現在。當運行

我出現以下錯誤:

Notice: Undefined variable: Database in C:\xampp\htdocs\InboxFeature\Api\Class.php on line 15

Fatal error: Cannot access empty property in C:\xampp\htdocs\InboxFeature\Api\Class.php on line 15


更改我行:

$Select = self::Database->prepare("SELECT * FROM test"); 

並取消: private $Database;

我得到帶有錯誤:

Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in C:\xampp\htdocs\InboxFeature\Api\Class.php on line 25

所以我的整體問題是我究竟在哪裏出錯了,我看過使用__construct()方法在Stackoverflow上顯示的示例。我看不到它出了什麼問題。


使用提供的答案。我附加了以下更改:

private static $Database; 
    public function __construct() { 
     self::$Database = new mysqli ('localhost','root','xxx','test'); 
    } 
    public static function TestSelect(){ 
     $Select = self::$Database->prepare("SELECT * FROM test"); 
     $Select->execute(); 
     $Select->bind_result($Test_ID, $Test_UName); 
     $Select->fetch(); 

     echo $Test_ID; 
    } 

已成功工作。感謝您的快速響應

+0

declare $數據庫變量 –

回答

0

您的語法顛倒了。

如果您聲明財產爲private $database;那麼您可以使用$this->database而不是$this->$database來訪問它。

如果您改爲將其聲明爲靜態屬性(private static $database),那麼它將是self::$database而不是self::database

無論哪種方式,您都應該確保該屬性在類的頂部聲明;在你的例子中你有private $database註釋掉。

+0

被註釋掉了,因爲我嘗試了所有不同的方法。我現在正在工作。我的問題更新將顯示我所做的。由於時間限制,我會盡我所能接受答案 –

+0

誰低估了我的答案 - 爲什麼? –

+0

我還是把我的設定爲+1,所以它不是我 –