访问类中的数据库构造

时间:2013-03-31 01:58:57

标签: php

我一直在试验类构造中的持久数据,我试图通过我的公共__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();

现在。运行时

我收到以下错误:

  

注意:未定义的变量:数据库中   第15行的C:\ xampp \ htdocs \ InboxFeature \ Api \ Class.php

     

致命错误:无法访问空属性   第15行的C:\ xampp \ htdocs \ InboxFeature \ Api \ Class.php


我将我的行改为:

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

并取消注释:     private $Database;

我收到了错误消息:

  

解析错误:语法错误,意外' - >' (T_OBJECT_OPERATOR)in   第25行的C:\ xampp \ htdocs \ InboxFeature \ Api \ Class.php

所以我的整体问题,就是我出错的地方,我已经使用__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;
    }

这已成功运作。感谢您的快速回复

1 个答案:

答案 0 :(得分:0)

你的语法相反。

如果您将该属性声明为private $database;,那么您可以使用$this->database而不是$this->$database来访问该属性。

如果您将其声明为静态属性(private static $database),那么它将是self::$database,而不是self::database

无论哪种方式,您都应该确保该属性在类的顶部声明;在您的示例中,您已private $database注释掉了。