我是新手。我试着解决这个问题并且一直在搜索,但我仍然无法解决。
出现错误
注意:未定义的变量:db(在dbFunction中)
致命错误:在非对象上调用成员函数query()(在dbFunction中)
和代码是
class dbConnect{
public $db;
public function __construct(){
$db = new mysqli("localhost", "root", "", "onlineshopping");
$db->set_charset("charset");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
}
}
class dbFunction extends dbConnect {
function __construct() {
}
public $db;
public function UserRegister($fname, $lname, $tel, $email, $pass){
$pass = md5($pass);
$db->query("INSERT INTO member(fname, lname, tel, email, password) values('".$fname."','".$lname."','".$tel."','".$email."','".$pass."')") or die(mysqli_error());
return $db;
}
}
答案 0 :(得分:0)
您的dbFunction
类重新定义__construct()
不执行任何操作,因此$db
属性仍未定义。如果您不想更改dbFunction中的构造函数,只需省略它,就会使用父构造函数。另一方面,如果要添加构造函数的功能,请确保调用父构造函数:
function __construct() {
parent::__construct();
// additional dbFunction construction here
}
答案 1 :(得分:0)
首先,您的$db
是__construct()
方法中的局部变量,而不是类属性,其次,正如@wogsland指出的那样,它会被孩子覆盖。
您可能想要查看一下the OO basics
class dbConnect{
public $db;
public function __construct(){
$this->db = new mysqli("localhost", "root", "", "onlineshopping");
$this->db->set_charset("charset");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
}
}
class dbFunction extends dbConnect {
public function UserRegister($fname, $lname, $tel, $email, $pass){
$pass = md5($pass);
$this->db->query("INSERT INTO member(fname, lname, tel, email, password) values('".$fname."','".$lname."','".$tel."','".$email."','".$pass."')") or die(mysqli_error());
}
}
请注意在两种方法中用$db
替换$this->db
。
我的帖子是你问题的准确答案,但正如其他人在评论中指出的那样,你需要改进很多东西,我希望这段代码适合你自己的个人游戏而不是“生产”。
因此,与代码示例直接相关,您可能希望扩展两个显而易见的事项:
答案 2 :(得分:0)
首先,没有必要使dbFunction成为dbConnect的子类。他们根本没有关系。事实上,我根本找不到任何需要使dbConnect成为一个类。您只需要模块__construct()。我建议您阅读OOP概念:)
仍然,回答你的问题 - dbConnect中的__construct()函数应该返回db变量!您可以在dbFunction中将此返回值分配给db变量。
将以下行添加到if子句之外的dbConnect的__construct():
return $db;
然后在dbFunction中实例化类dbConnect的对象,并将db分配给该返回值。 (我假设dbFunction现在不是dbConnect的子代...)
dbConn = new dbConnect()
db = dbConn.__construct()
答案 3 :(得分:0)
首先要学习一些OO编程的基础知识,看起来你应该在以任何方式使用它们之前首先阅读它们。试试这个http://litove.com/object-oriented-programming-2/你会得到所有答案。