有没有办法获取父类中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(( 方法!