考虑以下情况
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 URISplit
和class URIResolve
的构造函数将使用提供给class PageControl
的构造函数的字符串,并进行正确的构造。
我的目标是创建class PageControl
的对象并放松并看到它完成工作。工作方式 - >
class URISplit
完成)class URIResolve
完成)class PageControl
唷!很长的问题!
答案 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);
}
}