如何停止在子类中调用基类的构造函数

拉海尔

下面是我的基类,即数据库方法。

// 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>

请帮助我解决该问题。

Nikita U.

在您的情况下,您需要重载构造函数。只需__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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从子类的构造函数体中调用基类的构造函数

来自分类Dev

Dart-如何在子类的构造函数中调用超类的工厂构造函数?

来自分类Dev

调用基类构造函数与初始化子类中的成员变量

来自分类Dev

子类调用基类构造函数,然后在子类Arduino C ++中使用基类的实例方法

来自分类Dev

如何在Scala中从派生类辅助构造函数调用辅助基类构造函数?

来自分类Dev

如何在Scala中从派生类辅助构造函数调用辅助基类构造函数?

来自分类Dev

编译器在调用基类构造函数之前会在子类构造函数中寻找** super **关键字吗?

来自分类Dev

如何在子类构造函数中调用父构造函数?

来自分类Dev

在基类构造函数中获取子类的名称

来自分类Dev

如何在基类构造函数中为每个子类执行特定任务

来自分类Dev

如何从子类调用超类构造函数?

来自分类Dev

从Java中的子类构造函数调用超类

来自分类Dev

在父类构造函数调用的方法中访问子类字段

来自分类Dev

如何继承基类属性并在JavaScript中调用基类构造函数?

来自分类Dev

如何在模板派生类中调用模板基类的构造函数?

来自分类Dev

如何在C ++中从基类构造函数调用派生类方法?

来自分类Dev

从子类调用超类构造函数

来自分类Dev

子类调用超类构造函数

来自分类Dev

使用基类构造函数的子类构造函数的轮廓定义

来自分类Dev

如何覆盖子类中的抽象类构造函数

来自分类Dev

如何在父类的函数中调用子类的函数

来自分类Dev

为什么不调用基类中的静态构造函数?

来自分类Dev

如何避免在基类初始化器中调用默认构造函数?

来自分类Dev

在派生类 C++ 的构造函数中调用基类的构造函数

来自分类Dev

从派生类构造函数调用基类构造函数

来自分类Dev

从派生类构造函数调用基类构造函数

来自分类Dev

C ++当我不知道子类型时,从基类中调用子类函数

来自分类Dev

C ++当我不知道子类型时,从基类中调用子类函数

来自分类Dev

Django / Python:如何从子类中的父类调用函数?

Related 相关文章

  1. 1

    从子类的构造函数体中调用基类的构造函数

  2. 2

    Dart-如何在子类的构造函数中调用超类的工厂构造函数?

  3. 3

    调用基类构造函数与初始化子类中的成员变量

  4. 4

    子类调用基类构造函数,然后在子类Arduino C ++中使用基类的实例方法

  5. 5

    如何在Scala中从派生类辅助构造函数调用辅助基类构造函数?

  6. 6

    如何在Scala中从派生类辅助构造函数调用辅助基类构造函数?

  7. 7

    编译器在调用基类构造函数之前会在子类构造函数中寻找** super **关键字吗?

  8. 8

    如何在子类构造函数中调用父构造函数?

  9. 9

    在基类构造函数中获取子类的名称

  10. 10

    如何在基类构造函数中为每个子类执行特定任务

  11. 11

    如何从子类调用超类构造函数?

  12. 12

    从Java中的子类构造函数调用超类

  13. 13

    在父类构造函数调用的方法中访问子类字段

  14. 14

    如何继承基类属性并在JavaScript中调用基类构造函数?

  15. 15

    如何在模板派生类中调用模板基类的构造函数?

  16. 16

    如何在C ++中从基类构造函数调用派生类方法?

  17. 17

    从子类调用超类构造函数

  18. 18

    子类调用超类构造函数

  19. 19

    使用基类构造函数的子类构造函数的轮廓定义

  20. 20

    如何覆盖子类中的抽象类构造函数

  21. 21

    如何在父类的函数中调用子类的函数

  22. 22

    为什么不调用基类中的静态构造函数?

  23. 23

    如何避免在基类初始化器中调用默认构造函数?

  24. 24

    在派生类 C++ 的构造函数中调用基类的构造函数

  25. 25

    从派生类构造函数调用基类构造函数

  26. 26

    从派生类构造函数调用基类构造函数

  27. 27

    C ++当我不知道子类型时,从基类中调用子类函数

  28. 28

    C ++当我不知道子类型时,从基类中调用子类函数

  29. 29

    Django / Python:如何从子类中的父类调用函数?

热门标签

归档