标签:exce laravel 实例化 param 自己的 根据 throw 程序 get
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;
}
}
标签:exce laravel 实例化 param 自己的 根据 throw 程序 get
原文地址:https://www.cnblogs.com/ywjcqq/p/14848848.html