是可以实例化一个抽象类的父在PHP中的抽象类的孩子呢?

问题描述:

希望标题是有意义的,希望我的问题确实也是如此。是可以实例化一个抽象类的父在PHP中的抽象类的孩子呢?

所以我需要实例在我的网站在每一页的启动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"); 
    } 
} 

正如你可以看到我NEET使用SQL类现在是一个granparent类的function query()。但是,在中间的抽象类中,这会抛出异常并中断吗?

是它的工作:

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; 
+0

感谢确认家伙! – Naterade 2012-01-09 05:54:44

你贴应该只是罚款,因为类成员构造函数将运行父parent::__construct(),这将在Sql运行构造函数的构造函数的代码,因为__construct不在类Display中被重载。

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