2013-03-31 44 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,所以它不是我 –