下面是我的基类,即数据库方法。
// Constructor
public function __construct($argHost, $argUsername, $argPassword, $argDatabase)
{
$this->_host = $argHost;
$this->_username = $argUsername;
$this->_password = $argPassword;
$this->_database = $argDatabase;
}
// Connect to the database
public function Connect()
{
if (!$this->Is_Connected()) {
$this->_connection = mysqli_connect($this->_host,$this->_username,$this->_password,$this->_database);
} else {
return $this->_connection;
}
}
// Run query
public function Run($query)
{
if ($this->result = mysqli_query($this->_connection,$query)) {
return $this->result;
} else {
die("Couldn't perform the request");
}
}
我的孩子班级是下面的类别方法
class Categories extends Database
{
public $category_id = '';
public $category_name = '';
public $category_image = '';
// View Category
public function ViewCategories()
{
return $this->Run("SELECT * FROM categories");
}
}
现在的问题是,当我通过创建基类的对象运行Run()方法时,它运行良好。但是当我创建对象对象的子类时,即类别并执行方法viewCategories();。我收到以下错误
警告:缺少Database :: __ construct()的参数1,在第16行的E:\ xampplite \ htdocs \ ecommerce \ index.php中调用,并在以下位置的E:\ xampplite \ htdocs \ ecommerce \ classes \ class.database.php中定义第17行
警告:缺少Database :: __ construct()的参数2,该参数在第16行的E:\ xampplite \ htdocs \ ecommerce \ index.php中调用,并在E:\ xampplite \ htdocs \ ecommerce \ classes \ class.database.php中定义第17行
警告:缺少Database :: __ construct()的参数3,该参数在第16行的E:\ xampplite \ htdocs \ ecommerce \ index.php中调用,并在E:\ xampplite \ htdocs \ ecommerce \ classes \ class.database.php中定义第17行
警告:缺少Database :: __ construct()的参数4,在第16行的E:\ xampplite \ htdocs \ ecommerce \ index.php中调用并在E:\ xampplite \ htdocs \ ecommerce \ classes \ class.database.php中定义第17行
警告:mysqli_query()期望参数1为mysqli,在第35行的E:\ xampplite \ htdocs \ ecommerce \ classes \ class.database.php中给出的null无法执行请求
已过时:这就是我调用方法的方式
<?php
function __autoload($class_name) {
include 'classes/class.'.$class_name . '.php';
}
$connection = new Database("localhost", "raheel", "raheel786", "ecommerce");
$connection->Connect();
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ecommerce</title>
</head>
<body>
<?php
$category = new Categories();
$category_list = $category->ViewCategories();
var_dump($category_list);
?>
</body>
</html>
请帮助我解决该问题。
在您的情况下,您需要重载构造函数。只需__construct()
向子类添加空方法
class Categories extends Database{
public function __construct() {}
...
}
但它不能解决您的问题:)
作为解决方案,我可以看到2个变体:
1)制作静态变量,_connection
以便在所有对象中都可用
public function Connect(){
if( ! self::$_connection){
self::$_connection = mysqli_connect($this->_host,$this->_username,$this->_password,$this->_database);
}
return self::$_connection;
}
public function Run($query){
if($this->result = mysqli_query(self::$_connection,$query)){
return $this->result;
}
else
die("Couldn't perform the request");
}
2)我认为这是更好的方法。使用connect和query制作2个独立的类,以便其中一个包含另一个
class Database {
// Constructor
public function __construct($argHost,$argUsername,$argPassword,$argDatabase){
$this->_host = $argHost;
$this->_username = $argUsername;
$this->_password = $argPassword;
$this->_database = $argDatabase;
}
// Connect to the database
public function Connect(){
if(!$this->Is_Connected()){
$this->_connection = mysqli_connect($this->_host,$this->_username,$this->_password,$this->_database);
} else {
return $this->_connection;
}
}
// Run query
public function Run($query){
if($this->result = mysqli_query($this->_connection,$query)){
return $this->result;
}
else
die("Couldn't perform the request");
}
}
class Categories extends Database{
private $db;
public function __construct(Database $db) {
$this->db = $db;
}
public $category_id = '';
public $category_name = '';
public $category_image = '';
// View Category
public function ViewCategories() {
return $this->db->Run("SELECT * FROM categories");
}
}
因此用法是:
$connection = new Database("localhost", "raheel", "raheel786", "ecommerce");
$connection->Connect();
$category = new Categories($connection);
注意!我没有测试,仅举一个例子
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句