php - OOP 方法覆盖
问题描述
有没有办法在父类中获取 foo 方法的返回值?在下面的代码中,我得到“b”,我的目标是在不更改方法名称和不使用的情况下得到“a”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();
}
}
解决方案
我不确定-就像@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
推荐阅读
- typescript - 如何在 ReactNative Auth0 - /authorize url 中添加自定义查询参数?
- angular - Angular mat-datepicker-header aria-label 本地化
- java - Chrome 浏览器 - 等待驱动程序服务器启动超时
- react-native - 组件不能包含子组件。如果要在图像顶部呈现内容,请考虑使用
零件 - c# - 计算数组的非空元素 - LINQ 性能问题
- signal-processing - 我们可以在 ltspice 中回放 .wav 文件时执行暂停操作吗?
- mongodb - 如何在 kubernetes 之外的 statefulset 中公开 mongodb
- c# - 如何让函数返回两种不同类型的变量?
- c++ - SteamVR 覆盖控制器输入?
- javascript - 如何锁定范围组中的多个单元格,Excel - Web AddIns Office.js API