OOP 方法重写



有没有办法获取父类中foo方法的返回值?在下面的代码中,我得到"b",我的目标是在不更改方法名称和不使用return (new a () -> foo ());的情况下获得"a"

interface i {
function foo();
}
class a implements i {
public function foo() {
return 'a';
}
public function foo1() {
// return (new a()->foo()); 
return $this->foo();
}
}
class b extends a  {
public function get() {
return parent::foo1();
}
public function foo() {
return 'b';
}
}
$b=new b();
$b->get(); //return b

更新:目标是从另一个第三个类访问父类中的foo方法,例如

class c {
public function __construct(i $b)
{
$this->b = $b;
}
public function get() {
$this->b->foo1();
}
}

我不确定 - 就像@arkascha一样 - 实际目标是什么。这是另一种可能意味着什么(通过方法 foo1 显式执行(:

<?php
interface i {
function foo();
}
class a implements i {
public function foo() {
return 'a';
}
public function foo1() {
// here the 'self' is the trick instead of $this (and the only change to your code)
return self::foo();
}
}
class b extends a  {
public function get() {
return parent::foo1();
}
public function foo() {
return parent::foo();
}
}
$b=new b();
echo $b->get(); //returns a

你问是否有可能通过调用类型为b的对象的方法来获取a::foo()的返回值,所以 'a'。这应该很简单,除非我完全错过了你想做什么的理解:

<?php
interface i {
function foo();
}
class a implements i {
public function foo() {
return 'a';
}
}
class b extends a {
public function get() {
return parent::foo();
}
public function foo() {
return 'b';
}
}
$b = new b;
echo $b->get(); // obviously returns 'a'

这是因为您显式调用了显然解析为a::foo()parent::foo()

而不是调用

public function get() {
return parent::foo1();
}

像这样使用父级调用方法 foo

public function get() {
return parent::foo();
}

结果你会得到一个

在子类中调用parent::foo()可以直接访问父 foo(( 方法!

最新更新