2012-01-09 34 views
1

希望標題是有意義的,希望我的問題確實也是如此。是可以實例化一個抽象類的父在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()。但是,在中間的抽象類中,這會拋出異常並中斷嗎?

回答

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

感謝確認傢伙! – Naterade 2012-01-09 05:54:44

1

你貼應該只是罰款,因爲類成員構造函數將運行父parent::__construct(),這將在Sql運行構造函數的構造函數的代碼,因爲__construct不在類Display中被重載。

我希望我解釋得不錯,但試試:) 只要確保你的構造方法在Sql類中有2個下劃線;它在您發佈的代碼中只有1個。