PHP

(一)从零编写PHP容器-构建一个简单的自动对象创建容器

2020-02-19  本文已影响0人  FinalZero

项目源码

关键技术

功能实现

一个简单的自动对象创建容器(暂不考虑相互依赖的类创建)

代码实现

public function create($abstract)
{
    $refClass = new ReflectionClass($abstract);
    if ($refClass->hasMethod('__construct')) {
        $methodParams = $refClass->getMethod('__construct')->getParameters();
        foreach ($methodParams as $param) {
            $_constructParams[] = $this->create($param->getClass()->getName());
        }
    }
    return $refClass->newInstance(... ($_constructParams ?? []));
}

实现思路

  1. 类创建过程需要调用到构造函数__construct,因此创建过程需要动态获取到__construct的参数列表,列一下可行的方案
    • ReflectionClass反射类获取
    • file_get_contents或者readfile读取文件内容匹配construct参数部分
    • 自定义数组存储参数(即自己管理创建参数 - 可通过脚本生成)
  2. 从上面看,显然使用ReflectionClass反射类获取__construct是最方便的,也是目前几乎所有PHP容器实现的选择
  3. 然后考虑到__construct类中的其它类还有下一级的依赖参数列表,依赖层级是未知,故需要使用递归去遍历所有依赖(这里暂不考虑相互依赖的问题,后面会解决)

示例

上一篇 下一篇

猜你喜欢

热点阅读