我一直在试验类构造中的持久数据,我试图通过我的公共__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;
}
这已成功运作。感谢您的快速回复
答案 0 :(得分:0)
你的语法相反。
如果您将该属性声明为private $database;
,那么您可以使用$this->database
而不是$this->$database
来访问该属性。
如果您将其声明为静态属性(private static $database
),那么它将是self::$database
,而不是self::database
。
无论哪种方式,您都应该确保该属性在类的顶部声明;在您的示例中,您已private $database
注释掉了。