2009-06-24 148 views
0

考慮下列情形參數的構造函數級聯

class URISplit { 

    var $REQ_URI; 

    //some more variables 

    function __construct($uri) { 
     //some code 
     $this->REQ_URI = $uri; 
     //some code yet again 
    } 
} 

及以下

class URIResolve extends URISplit { 

    //some variables 

    function __construct($uri) { 
     //some code 
    } 
} 

和另一

class PageControl extends URIResolve { 

    //some variables 

    function __construct($uri) { 

     //some more code 

    } 
} 

,現在下面的語句

$page = new PageControl($_SERVER['REQUEST_URI']);

此聲明是否可確保所有課程的正確構造。

換句話說,class URISplitclass URIResolve的構造函數會使用提供給class PageControl的構造函數的字符串,並進行適當的構造。

我的目標是創建一個對象class PageControl並放鬆,看看它做的工作。工作意味着 - >

  1. 分裂的URI(由class URISplit完成)
  2. 解決它(其中獲取數據,什麼是問即是否它的一個帖子,網頁,新聞,或其他任何東西)(秉乘class URIResolve
  3. 加載適當的標題,頁面和其他頁面組件(由功能class PageControl

呼做!長的問題!

回答

2

ÿ你應該顯式調用父子構造函數。以this site爲例。

原因是子類可能會選擇給父構造函數一些不同的參數。

哎呀,它甚至有可能有一個

class SOSplit extends URISplit { 
    function __construct() { 
     parent::__construct("http://stackoverflow.com"); 
    } 
} 

class URIResolve extends URISplit { 

    //some variables 

    function __construct($uri) { 
     parent::__construct($uri); 
    } 
} 
+0

描述你應該調用添加到父類的構造,但由所需要的參數($ URI)我的問題代碼中的所有三個類都提供給基類​​構造函數。 這將直接在最奇妙的類構造函數 – OrangeRind 2009-06-24 07:44:14

+0

哦!所以不要像Java/C++中那樣級聯構造函數,或者僅在涉及參數化構造函數的情況下才是鏈接上的文章?所以這意味着首先加載默認構造函數,然後當控制返回到父類時,我們顯式調用子類參數化構造函數? – OrangeRind 2009-06-24 07:52:40