谁能告诉我为什么这不起作用。
class class1 {
private $database;
function class1()
{
$database = $this->connect();
}
private function connect(){
$database = mysqli_connect("localhost","username","","db");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
return $database;
}
private function usedb(){
$query = "some sql";
mysqli_query($database,$query);
}
}
我希望这个简单的例子可以足够清楚地描述我的问题。无论如何,当我运行这样的东西时,我看到一个错误,告诉我在"usedb(("函数中引用了一个未定义的变量"数据库"。好像变量已经超出了范围...谁能给我一个解决方案?
这是因为在class1()
中,您通过以下方式声明另一个局部变量$database
:
$database = $this->connect();
若要设置和访问类的 $database
属性,应使用:
$this->database = $this->connect();
usedb()
函数也是如此:
private function usedb(){
$query = "some sql";
mysqli_query($this->database,$query);
}
所以你的最终代码应该看起来像这样:
class class1 {
private $database;
function class1()
{
$this->database = $this->connect();
}
private function connect()
{
$database = mysqli_connect("localhost","username","","db");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
return $database;
}
private function usedb()
{
$query = "some sql";
mysqli_query($this->database,$query);
}
}
注意:
这同样适用于函数connect()
$database
变量。尽管名称相同,但它与外部$database
变量无关,因为应该使用 $this->database
访问(如果需要(
更改
$database = $this->connect();
自
$this->database = $this->connect();
并且所有变量$database
更改为$this->database
以进行set