Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中,是否可以在抽象类的子类中实例化抽象类的父类?_Php_Abstract Class_Superclass - Fatal编程技术网

在PHP中,是否可以在抽象类的子类中实例化抽象类的父类?

在PHP中,是否可以在抽象类的子类中实例化抽象类的父类?,php,abstract-class,superclass,Php,Abstract Class,Superclass,希望标题有意义,希望我的问题也有意义 因此,我需要在我的站点上的每个页面的开始处实例化一个Sql类,这样所有其他类都可以有一个有效的mysql资源来执行查询、更新等操作,而无需创建多个Sql对象。 但是,目前我的类扩展了一个抽象类,用于基于类上下文的不同函数实现 问题:在抽象类的子类中,我是否可以使用父类::u construct绕过抽象超类并实例化抽象从中扩展的Sql类 EX. class Sql { function _construct() { //get vali

希望标题有意义,希望我的问题也有意义

因此,我需要在我的站点上的每个页面的开始处实例化一个Sql类,这样所有其他类都可以有一个有效的mysql资源来执行查询、更新等操作,而无需创建多个Sql对象。 但是,目前我的类扩展了一个抽象类,用于基于类上下文的不同函数实现

问题:在抽象类的子类中,我是否可以使用
父类::u construct
绕过抽象超类并实例化抽象从中扩展的Sql类

EX.

class Sql {
    function _construct() {
        //get valid db resource
    }

    function query() {
        //// query code
    }
}

abstract class Display extends Sql {
    function show() {
       return $this->displayRecipe();
    }        

    abstract function getRecipe();
}


class Members extends Display {
    function __construct() {
        parent::__construct();

    }

    function getRecipe($member_id) {
        return $this->query("select * from recipes where member=$member_id");
    }
}
正如您所见,我需要使用Sql类的
函数query()
,它现在是一个父类。但是,在中间的抽象类中,这会抛出异常并中断吗?

< p>是的,它会起作用:

Class Person{
    public $age;
    public $name;
    public $school;
    public function __construct($age,$name,$school){
        $this->age = $age;
        $this->name = $name;
        $this->school = $school;
        echo "It works!";
    }
}


abstract class Student extends Person{
}

class UniversityStudent extends Student{

    public function __construct($age,$name,$shcool){
        parent::__construct($age,$name,$school);
    }
}

$x = new UniversityStudent(20,"Paul","ULA");

echo $x->age;

您发布的代码应该可以正常工作,因为类成员中的构造函数将运行父级
父级::\uu construct()
,这将在
Sql
中运行构造函数,因为类显示中没有重载\uu构造

我希望我解释得足够好,但试一下:)
只需确保您的构造方法在Sql类中有2个下划线;您发布的代码中只有1个。

谢谢大家的确认!!