有没有办法在父类中获取foo方法的返回值?在下面的代码中,我得到“ b”的目标是在不更改方法名称且不使用return (new a () -> foo ());
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();
}
}
答案 0 :(得分:1)
我不确定-就像@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
答案 1 :(得分:0)
您询问是否可以通过调用类型为a::foo()
的对象的方法来获得b
的返回值,即'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'
这是因为您明确地调用parent::foo()
,显然可以解决a::foo()
。
答案 2 :(得分:0)
而不是呼叫
public function get() {
return parent::foo1();
}
像这样使用父级调用方法foo
public function get() {
return parent::foo();
}
您将得到一个结果
答案 3 :(得分:0)
在子类中调用parent::foo()
可以直接访问父foo()方法!