2014-09-27 48 views
0

我正在学习OO PHP,并且正在尝试在子类中使用parent ::方法。我注意到我不得不使用“额外”返回为父方法的输出显示。 有人可以解释我为什么这是?为什么在调用父项时使用返回

请理解我正在使用一本书,这个例子似乎有点多余。请随身携带,因为下面的代码是新手...

这是我使用的代码,并且在代码中我发表了评论。

class ShopProduct { 

    public $productnumber; 

    public function __construct($productnumber) { 
     $this->productnumber = $productnumber; 
    } 
    public function getSummary(){ 
     return $this->productnumber; 
    } 
} 

class BookProduct extends ShopProduct { 

    public function __construct($productnumber) { 
     parent::__construct($productnumber); 
    } 
    public function getSummary() { 
     return parent::getSummary(); // if i dont use return it doesnt work? why is that? 
     // parent::getSummary(); is not enough it seems. 
    } 
} 

$product = new BookProduct(11111); 
echo $product->getSummary(); 
?> 
+1

好吧,如果你不这样做与价值的东西,父类的方法返回,你能指望什么?返回不会将任何内容打印到输出缓冲区。所以你在扩展类中调用函数,但是,扩展类对该函数没有任何作用。因为你的子函数的返回优先于父函数。 – Ohgodwhy 2014-09-27 19:15:18

+0

'getSummary()'应该返回一个值,在这种情况下它只返回'parent :: getSummary()'的值。你当然可以重写孩子的'getSummary()'。 – 2014-09-27 19:16:11

+0

我的代码的最后一行使用方法和Echo的。为此我期待着这个价值。在父类方法中,返回值,所以我期待它在child方法中继承“return”--behaviour,因为我从孩子调用父方法。如果有人可以用更多的词汇来解释这将是最有帮助的。 – rinserepeat 2014-09-27 19:18:20

回答

1
public function getSummary() { 
    return parent::getSummary(); // if i dont use return it doesnt work? why is that? 
    // parent::getSummary(); is not enough it seems. 
} 

与任何其它的函数或方法调用替换parent::getSummary()

public function getSummary() { 
    foo(); 
} 

你当然不会指望getSummary在这种情况下返回任何东西,对不对?仅仅因为你调用的方法是parent::...不会改变任何有关此行为的内容。它不会自动的return,因为你可能需要做这样的事情:

public function getSummary() { 
    $summary = parent::getSummary(); 
    return "Book: $summary"; 
} 

顺便说一句,如果你的方法做的唯一事情就是调用它的父母,你可以离开了整个方法。换句话说,这样的:

class BookProduct extends ShopProduct { 

    public function __construct($productnumber) { 
     parent::__construct($productnumber); 
    } 
    public function getSummary() { 
     return parent::getSummary(); 
    } 
} 

是完全一样的:

class BookProduct extends ShopProduct { } 
+0

Thanks Deceze,我正在使用一本书,我认为他们试图通过所有的概念。这可能是我的例子似乎有点多余的原因。我的问题是关注“为什么”我应该使用“返回”两次。至少这就是我的大脑告诉我的。我作为(新手)期望父方法使用的“返回”被子方法继承。我似乎误解了这一点,但我试图理解这是为什么。 (我在最后一行使用了一个回声,这样我确实希望输出一些东西吗?) – rinserepeat 2014-09-27 19:31:48

+0

好吧,我想我明白你在说什么,这要归功于第二个例子!我想也许OO的魔法带来的比我想象的要多。我感谢你的时间和解释! – rinserepeat 2014-09-27 19:38:57

相关问题