0
<?php
class HTML
{
protected $name;
public $id;
private $with;
protected function basicAttribute()
{
return "name='$this->name' id='$this->id'";
}
}
Class HTML_div extends HTML
{
public function __construct($id , $name)
{
$this->id = $id;
$this->name = $name;
}
public function getDiv($content)
{
$basicAttribute = $this->basicAttribute();
echo "<div $basicAttribute >$content</div>";
}
}
$objDiv = new HTML_div("bloc_main" , 'avc');
$objDiv->getDiv('this is and example of inheritance in php');

问题:

如果我更改$basicAttribute = $this->basicAttribute();$basicAttribute = parent::basicAttribute();,它也可以。所以我想知道它们之间有什么区别?哪个是调用父方法的更好方法?

4

2 回答 2

2

在这种确切的情况下,他们做同样的事情。但是,通常最好使用 $this->basicAttribute()。这些调用中的每一个都是这样的:

  1. $this->basicAttribute() -- 如果存在,则调用子类的 basicAttribute() 实现,否则查找最近的祖先实现(在这种情况下,只有父类和子类,因此它调用父类)
  2. parent::basicAttribute() - 调用最接近祖先的实现(在本例中再次调用父级)。这将忽略子类中 basicAttribute() 的实现,因此建议仅在覆盖父函数并希望显式调用父函数时使用它。
于 2013-08-21T02:33:55.313 回答
0

这很简单,真的。当您扩展一个类时,新类会继承该类的所有属性和方法(属性和方法除外private)。扩展的类称为父类,扩展的类称为子类

所以,如果我们有一个看起来像这样的类:

HTML
    basicAttribute()

我们扩展它:

HTML_div extends HTML
    basicAttribute() // This method is automatically inherited from HTML
                     // which means that you do not have to create it yourself

所以,当你打电话时parent::basicAttribute()HTML_div你真的是在调用HTML's 方法。

我相信这个例子应该以易于理解的方式解释它:

class A {
    function test() {
        echo 'A';
    }
}
class B extends A {
    function test() {
        echo 'B';
    }
    function parentTest() {
        parent::test();
    }
}
$b = new B;
$b->test(); // 'B'
$b->parentTest(); // 'A'
于 2013-08-21T02:43:17.350 回答