其他分享
首页 > 其他分享> > Laravel 之 反射

Laravel 之 反射

作者:互联网

PHP 反射是程序实现依赖注入的基础,也是Laravel服务容器实现服务解析的基础

反射函数参考:

<?php

class MyReflection
{
    public function make(string $className): object
    {
        try{
            //反射传递的类
            $reflectionClass = new ReflectionClass($className);
            //获取到反射类的construct方法
            $constructor = $reflectionClass->getConstructor();
            //定义一个默认的依赖属性
            $dependent = [];

            //判断这个类是否存在construct函数
            if (!is_null($constructor)){
                //获取到construct的属性
                $parameters = $constructor->getParameters();
                //获取到属性对应的类的属性...(递归)
                $dependent = $this->handle($parameters);
            }

            //根据获取到属性,实例化这个类
            return $reflectionClass->newInstanceArgs($dependent);
        }catch (\Exception $exception){
            throw new \Exception($className. '未定义');
        }
    }
    
    public function handle(array $parameters): array
    {
        //定义一个默认的依赖属性数组
        $dependent = [];

        //获取到construct的参数,循环遍历
        foreach ($parameters as $parameter){
            //判断属性是否是类
            if ($parameter->getClass()){
                //递归遍历,获取到依赖属性
                $dependent[] = $this->make($parameter->getClass()->name);
            } else {
                //判断是否存在默认值
                if ($parameter->isDefaultValueAvailable()){
                    //存在默认值的,将值添加到依赖数组中
                    $dependent[] = $parameter->getDefaultValue();
                } else {
                   	//可以根据类型判断,添加自己的参数
                    $dependent[] = '';
                }
            }
        }

        return $dependent;
    }
}

标签:Laravel,反射,ReflectionClass,parameters,dependent,获取,parameter,属性
来源: https://www.cnblogs.com/ywjcqq/p/14848848.html