为什么这个php变量undefined
问题描述:
有谁能告诉我为什么这不起作用。为什么这个php变量undefined
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();
规则同样适用于功能:
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
因为变量_has_已经消失超出范围。 '$ database'是你函数中的局部变量;你应该使用'$ this-> database'来访问该类的属性。 – andrewsi 2014-10-10 17:08:31
@andrewsi是对的:在PHP中,您需要*使用'this'关键字来访问类成员,而不像Java或C#。 – SolarBear 2014-10-10 17:09:39