参数化构造函数级联

时间:2009-06-24 07:24:03

标签: php constructor class-design

考虑以下情况

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
  4. 中的函数完成

    唷!很长的问题!

2 个答案:

答案 0 :(得分:3)

我认为你应该按照http://php.net/manual/en/language.oop5.decon.php

中的描述添加对父构造函数的调用
class SubClass extends BaseClass {
  function __construct() {
    parent::__construct();
    print "In SubClass constructor\n";
  }
}

答案 1 :(得分: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);
    }
}