我正在编写一个递归函数,如下所示:
private function getManager($employee)
{
$manager = $employee->manager;
if ($manager) {
array_push($this->managers, $manager->id);
$this->getManager($manager);
}
return;
}此功能接收员工并找到他的管理人员。如果找到一个manage,那么将管理器id推到第5行的数组中)。然后递归调用此函数,并以员工身份传递经理。如果在第3行没有找到管理器,那么这个函数就返回(第8行)。
所以我的问题是,如果我不返回第6行($this->getManager($manager);)中的递归调用,它们是否有问题?
发布于 2020-05-22 10:57:53
不知道这是不是你想的,但它有效。
function getManagers($employee)
{
$managers = [];
if (isset($employee->manager)) {
array_push($managers, $employee->manager->id);
array_push($managers, ...getManagers($employee->manager));
}
return $managers;
}发布于 2022-05-21 22:42:04
不,写空的报税单绝对没有好处。不管return是否存在,该方法都将停止。
请观察以下两种方法,它们显示相同的、无错误的结果,而不管返回的结果如何。
代码:(演示)
class Management
{
private $managers = [];
function __construct($managerTree)
{
$this->getManager($managerTree);
var_export($this->managers);
echo "\n---\n";
$this->managers = [];
var_export($this->managers);
echo "\n---\n";
$this->getManager2($managerTree);
var_export($this->managers);
}
private function getManager(?object $employee): void
{
$manager = $employee->manager;
if ($manager) {
array_push($this->managers, $manager->id);
$this->getManager($manager);
}
return;
}
private function getManager2(?object $employee): void
{
$manager = $employee->manager;
if ($manager) {
array_push($this->managers, $manager->id);
$this->getManager($manager);
}
}
}
new Management(
(object) [
'id' => 3,
'manager' => (object) [
'id' => 2,
'manager' => (object) [
'id' => 1,
'manager' => null
]
]
]
);输出:
array (
0 => 2,
1 => 1,
)
---
array (
)
---
array (
0 => 2,
1 => 1,
)https://stackoverflow.com/questions/61953051
复制相似问题