可以在PHP中实例化抽象类的子类中的抽象类的父级吗?

时间:2012-01-09 05:22:34

标签: php abstract-class superclass

希望这个标题有意义,希望我的问题也可以。

所以我需要在我网站上每个页面的开头实例化一个Sql类,这样所有其他类都可以拥有一个有效的mysql资源来进行查询,更新等,而无需创建多个Sql对象。 但是,目前我的类根据类上下文为不同的函数实现扩展了一个抽象类。

问题:在抽象类的子代中,我可以使用parent::_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类的function query(),这是一个granparent类。但是,如果在中间使用抽象类,是否会抛出异常并中断?

2 个答案:

答案 0 :(得分:1)

是的,它会起作用:

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;

答案 1 :(得分:1)

您发布的代码应该可以正常工作,因为类成员中的构造函数将运行父parent::__construct()的构造函数,它将在Sql中运行构造函数,因为__construct未在类Display中重载

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