把悲伤当酒窝 2021-02-22 22:03 采纳率: 50%
浏览 14

php反射中的递归问题

public function get($class)
    {
        if (isset($this->objectTree[$class])) {
            $class = $this->objectTree[$class];
        }
        $reflect = new \ReflectionClass($class);
        dump($reflect);
        $construct = $reflect->getConstructor();
        if (!$construct) {
            return new $class;
        }
        $params = $construct->getParameters();
        if (!$params) {
            return new $class;
        }
        foreach($params as $param) {
            $class = $param->getClass();
            if ($class) {
                $args[] = $this->get($class->name);
            }
        }
        dump($reflect);
        return $reflect->newInstanceArgs($args);
    }

我现在没明白,类方法第一次执行时,$reflect是Person类的反射对象,当执行到foreach循环时,又递归调用了一次这个get方法,此时$reflect是Car类的反射对象,为什么当foreach中递归执行完成之后,$reflect又变成了Person类的反射对象,而没有被递归调用时所覆盖?
希望有人能帮忙解答一下,感谢!

 
  • 写回答

1条回答 默认 最新

  • 半支烟z 2021-02-23 10:32
    关注

    第19行换成

    return $this->get($class->name);

     

    函数外

    然后在外边赋值  $args[] = $this->get($class);

    评论

报告相同问题?

悬赏问题

  • ¥15 前端echarts坐标轴问题
  • ¥15 CMFCPropertyPage
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳