以下是代码:
<? php
class Animal
{
public $type = 'Animal';
function printProperties ()
{
echo $this->type;
}
}
class Dog extends Animal
{
public $type = 'Dog';
function printProperties()
{
echo $this->type.'<br>';
parent::printProperties ();
}
$aDog = new Dog;
$aDog-> printProperties ();
?>
代码打印Dog newl Dog
我预计输出为Dog newline Animal
。如何得到这个结果。如果我覆盖属性,我是否无法访问子类中的基本属性?
答案 0 :(得分:0)
<?php
class foo {
var $x;
function foofoo()
{
$this->x = "foofoo";
return;
}
}
class bar extends foo {
// we have var $x; from the parent already here.
function barbar()
{
parent::foofoo();
echo $this->x;
}
}
$b = new bar;
$b->barbar(); // prints: "foofoo"
?>
资料来源:http://php.net/manual/en/keyword.parent.php
答案 1 :(得分:0)
没有父属性这样的东西。属性是类实例的一部分,即对象。从这个意义上说,你的对象只有一个属性“type”(你定义了两次)。解释器为它分配在最具体的类上指定的值,你对象是(继承)的实例,即Dog。
因此,当printProperties方法(两个实现,在父类和子类中)打印对象“type”属性的值时,它们都将输出相同的值(<br>
除外)。