php:调用父方法的问题

时间:2013-08-21 02:23:31

标签: php

<?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();,它也有效。所以我想知道它们之间有什么区别?哪个是调用父方法的更好方法?

2 个答案:

答案 0 :(得分:2)

在这种情况下,他们做同样的事情。但是,使用$ this-&gt; basicAttribute()通常会更好。 每个电话的作用是:

  1. $ this-&gt; basicAttribute() - 调用child的basicAttribute()实现(如果存在),否则查找最近的祖先实现(在这种情况下只有父和子,所以它调用父)
  2. parent :: basicAttribute() - 调用最接近祖先的实现(在这种情况下再次调用父代)。这将忽略子类中basicAttribute()的实现,因此建议仅在覆盖父函数并希望显式调用父函数时才使用它。

答案 1 :(得分: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的方法。

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

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'