我的班级名为Books
class Books {
/* Member variables */
var $price;
var $title;
function __construct( $title, $price ) {
$this->title = $title;
$this->price = $price;
}
/* Member functions */
function getPrice(){
echo $this->price ."<br/>";
}
function getTitle(){
echo $this->title ." <br/>";
}
}
然后我添加了另一个继承我的Book类的类
class Novel extends Books {
var $publisher;
function getPublisher(){
echo $this->publisher. "<br />";
}
function __construct( $publisher ) {
$this->publisher = $publisher;
}
}
现在我想通过构造函数调用Novel类并设置它的所有属性,例如title,price和publisher,所以如果我这样做
$physics = new Books("Physics for High School",1);
$testNovel = new Novel("Test Publisher");
它设置了$ testNovel对象的发布者值,效果很好 那么如何在创建它的对象时设置Title和price的值?
即使我尝试
$testNovel = new Novel("Test Title",4,"Test Pubisher");
这里&#34;测试标题&#34;被设置为发布者而不是&#34; Test Publisher&#34;。而且,如果我在签名中添加更多值,就像这样
$testNovel = new Novel("Test Title",4,"New Pub","","Whatever","","Why it allow");
它没有抛出任何错误为什么??
答案 0 :(得分:1)
当您扩展定义构造函数的类时,使用定义它自己的构造函数的类,您需要自己调用父构造函数来提供所需的参数。 E.g:
class Novel extends Books
{
// ...
function __construct($title, $price, $publisher)
{
$this->publisher = $publisher;
parent::__construct($title, $price);
}
}
来自manual:
注意:如果子类,则不会隐式调用父构造函数 定义构造函数。为了运行父构造函数,调用 子构造函数中的 parent :: __ construct()是必需的。如果 child没有定义构造函数,那么它可能会继承自 父类就像普通的类方法(如果它没有声明 作为私人)。