我有此代码:
class database{
var $conn;
function connect($server,$host_username,$host_password,$host_database){
$server = 'localhost';
$host_username = 'root';
$host_password = '';
$host_database = 'e-vent system db';
$conn= new mysqli($server,$host_username,$host_password,$host_database);
if ($conn->connect_error){
die("db connection error:". $conn->connect_error);
}
}
function read_db($table,$condition){
$read="SELECT * FROM ".$table." ".$condition;
$read_result=$conn->query($read);
if(!$read_result){
echo "select error:". mysqli_error($conn);
}
return $result;
}
}
我收到此错误:
注意:未定义的变量:第19行的C:\ xampp \ htdocs \ E-vent \ database.php中的conn
如何使$conn
函数可见read_db
变量?
答案 0 :(得分:3)
更改此行:
if ($conn->connect_error){
到
if ($this->conn->connect_error){
表示替换全部:
$conn->query
到
$this->conn->query
说明::如果要在整个类范围内使用变量,则必须使用类变量而不是局部(函数)范围变量。在这一行:
$conn->connect_error
$conn
是一个局部变量,其作用域仅限于该函数,但是当您使用$this->conn
时,这意味着您引用的是该类的所有成员函数均可访问的类变量。班级。
并将connect
函数的所有内容放入类构造函数中,以便在类初始化时初始化此连接。 (感谢@Magnus指出这一点)
看看variable scope,它将帮助您理解概念。
答案 1 :(得分:1)
您正在将类变量用于函数中,oops的基本规则是要使用类变量,我们必须使用object访问它。因此可以使用$this
在同一类下使用类变量。
因此您的代码必须是:
$this->$conn->connect_error
代替
$conn->connect_error
答案 2 :(得分:0)
您需要使用$this
-特别是$this->conn
,使连接对象成为类的属性。将您的连接对象分配给该属性。然后,您需要在该类中的其他所有地方引用$this->conn
,而不是使用$conn
。
class database {
public $conn;
public function connect($server, $host_username, $host_password, $host_database)
{
$server = 'localhost';
$host_username = 'root';
$host_password = '';
$host_database = 'e-vent system db';
$this->conn = new mysqli($server, $host_username, $host_password, $host_database);
if ($this->conn->connect_error) {
die("db connection error:". $this->conn->connect_error);
}
}
public function read_db($table, $condition)
{
$read = "SELECT * FROM ".$table." ".$condition;
$read_result = $this->conn->query($read);
if (!$read_result) {
echo "select error:". mysqli_error($this->conn);
}
return $result;
}
}
话虽这么说,但要注意几件事
connect()
方法接受所有参数,但是您仍然可以在函数中覆盖它们。替代方法是删除参数,删除硬编码值或在参数为空的情况下使用硬编码值。答案 3 :(得分:0)
最好使用公共访问修饰符而不使用var。 What does PHP keyword 'var' do?。
Class属性必须定义为public,private或protected。如果使用var声明,则该属性将定义为public。
并且出于兼容性原因,仍支持使用var关键字声明变量的PHP 4方法(作为public关键字的同义词)。在PHP 5 5.1.3之前的版本中,其用法将生成E_STRICT警告。
PHP变量-http://php.net/manual/en/language.variables.variable.php
需要进行以下更改
class database{
public $conn
还有这里
$this->conn= new mysqli($server,$host_username,$host_password,$host_database);
还有这里
if ($this->conn->connect_error){
die("db connection error:". $this->conn->connect_error);
}
这里也是
$read_result=$this->conn->query($read);