2016-03-18 247 views
1

我有以下PHP类:从属性在PHP中的子对象访问父方法?

class a { 
    public function vw($xc) { 
     return $xc; 
    } 
} 

class b extends a { 
    public function wv() { 
     echo vw() . 'from b via wv'; 
    } 
} 

$d = new a; 
echo $d->vw('this is a'); 
$c = new b; 
echo $c->vw('this is a from b via a'); 
$c->wv(); 

我得到的输出是:

this is a 

为什么我没有得到的echo $c->vw('this is a from b via a');c->wv();输出?

+1

能否请你格式化代码并修正错误(在那里没有'test'或't'类)? – Jan

+0

对不起@jan –

+0

*“为什么我没有得到echo $ c-> vw的输出('这是一个从b经过a');和c-> wv();?” - - 因为脚本触发'echo vw()行上的致命错误。 '从b通过wv';'。没有函数'vw()',这会让你的脚本崩溃。启用[错误报告](http://php.net/manual/en/function.error-reporting.php)。不要闭上眼睛过马路! – axiac

回答

2

您可以通过parent::,例如访问父的方法parent::vw()。但类a的方法vw需要一个参数,所以这段代码根本不起作用。但是你应该明白使用父关键字。

class a { 
    public function vw($xc) { 
     return $xc; 
    } 
} 

class b extends a { 
    public function wv() { 
     echo parent::vw() . 'from b via wv'; 
    } 
} 

$d = new a; 
echo $d->vw('this is a'); 
$c = new b; 
echo $c->vw('this is a from b via a'); 
$c->wv(); 

http://php.net/manual/en/keyword.parent.php

https://3v4l.org/0MkQI

0

在 “B” 类,你应该写的功能VW为:

public function wv(){ 
    echo $this->vw() . "from b via wv\n"; 
    } 

此外,在最后一行的$ C-> WV()调用缺少参数: $ C- > wv(“我是一个缺少的参数”);

0

试试这个

 class a { 
      public tt; 

       public function vw($xc){ 
        $this->tt = $xc; 
      return $this->tt; 
     } 
} 

class b extends a 
{ 
    public function(){ 
    return $this->tt. 'from b via wv' 
} 
}