当前位置: 首页 > news >正文

东莞知名网站优化公司大宗现货交易平台

东莞知名网站优化公司,大宗现货交易平台,国外网站备案吗,wordpress响应式视频说明 1. 或许是全网首发#xff0c;我翻过很多文章#xff0c;从未有一个博主讲过这个东西#xff0c;很多博主只讲了IOC、DI和反射机制的常见用法#xff0c;因类类型形参反射的巧妙用法有相当高的难度和学习盲区#xff0c;所以从未有人讲过类类型的形参它怎么就被自动…说明 1. 或许是全网首发我翻过很多文章从未有一个博主讲过这个东西很多博主只讲了IOC、DI和反射机制的常见用法因类类型形参反射的巧妙用法有相当高的难度和学习盲区所以从未有人讲过类类型的形参它怎么就被自动实例化的。 2. 在Laravel框架或者是其它框架中类的成员方法中形参的类型定义为某个类在方法体内就直接当做对象来调用这并不是PHP本身自带的语法而是利用了反射机制一直很好奇是怎么实现的。然而框架源码又太繁重所以采用原生的方式实现。 3. 反射的功能非常强大,反射可以针对类本身做很多开挂操作因此PHP框架才会变得这么易用与强大类类型形参实例化仅仅是冰山一角官方文档。 代码 ?php /*** Class 封装一个可自动实例化类的类类型的成员方法形参的容器*/ class AutoNew {/*** function 递归实例化类构造方法中的数据* param $class string 类名* return object|null* throws ReflectionException*/public function newConstructClassTypeParam($class) {//实例化反射类$reflection new ReflectionClass($class);//获取类的构造函数$constructor $reflection-getConstructor();if ($constructor null) {//如果构造函数存在实例化这个类此方法支持给构造函数传参如果有参数的话return $reflection-newInstanceArgs();}//获取构造方法的参数结果返回一个数组若有值返回的是ReflectionParameter类$params $constructor-getParameters();$dependencies [];foreach ($params as $param) {//获取构造方法参数的类型注意之有在变量左边声明类型的才可以例如string $p获取的是string但$p ab获取的就是null$dependencyType $param-getType();//isBuiltin()方法返回bool值参数类型修饰符为string/int/bool/float/callable/array/object/mixed的都为true但传输的内置外置接口类都为false。目前使用PHP8无法声明形参为null和resource类型if (($dependencyType ! null) (! $dependencyType-isBuiltin())) {//获取形参声明的类型返回字符串类型字符串就是字符串接口就是接口类就是类$dependencyClassName $dependencyType-getName();//此处可以理解为如果形参是类或者是含有构造方法的抽象类或者接口的构造方法的形参中有以上类型就递归实例化它$dependencies[] $this-newConstructClassTypeParam($dependencyClassName);} else {//检测形参是否有默认值如果有返回默认值如果没有返回null$dependencies[] $param-isOptional() ? $param-getDefaultValue() : null;}}//如果构造函数存在实例化这个类此方法支持给构造函数传参如果有参数的话return $reflection-newInstanceArgs($dependencies);}/*** function 自动实例化某个类中某个方法的类类型的形参* param $class string 类名* param $method string 方法名* param $parameters array 参数名* return void* throws ReflectionException*/public function init($class, $method, $parameters []) {//实例化PHP内置的反射类$reflection new ReflectionClass($class);//检查方法是否已定义if ($reflection-hasMethod($method)) {//创建一个实例$instance $this-newConstructClassTypeParam($class);//返回一个ReflectionMethod对象获取方法的形参和其它元信息并填充到ReflectionMethod对象中$methodReflection $reflection-getMethod($method);//返回数组获取干净的形参数据$methodParams $methodReflection-getParameters();$methodDependencies [];foreach ($methodParams as $param) {//获取方法参数的类型注意只有在变量左边声明类型的才可以例如string $p获取的是string但$p ab获取的就是null$paramType $param-getType();//isBuiltin()方法返回bool值参数类型修饰符为string/int/bool/float/callable/array/object/mixed的都为true但传输的内置外置接口类都为false。目前使用PHP8无法将形参声明null和resource类型if (($paramType ! null) (! $paramType-isBuiltin())) {//获取形参声明的类型返回字符串类型字符串就是字符串接口就是接口名类就是类名$dependencyClassName $paramType-getName();//返回数组数组的值是创建出来的对象。此处的逻辑可以理解为类成员方法的形参是类的就实例化它$methodDependencies[] $this-newConstructClassTypeParam($dependencyClassName);} else {//判断遍历出来的形参在不在实际传递的实参数组中如果在把这个值返回如果不在判断是否有默认值如果有则返回如果没有默认值赋值为nullif (array_key_exists($param-getName(), $parameters)) {$args $parameters[$param-getName()];} elseif ($param-isOptional()) {$args $param-getDefaultValue();} else {$args null;}$methodDependencies[] $args;}}//调用创建的实例并传参$methodReflection-invokeArgs($instance, $methodDependencies);}} }//调用端------------------------------------------------------------------------------------- //相当于框架业务逻辑层的代码 class StudentService {/*** function 通过班级id查询一个班有多少人* param $class_id* return int*/public function getStudentNum($class_id) {//sql ...return 123;} }//相当于框架的控制器 class StudentController {/*** function 此方法根据逻辑可要可不要* return void*/public function __construct() {echo 构造方法被调用了 . PHP_EOL;}/*** function 模拟获取学生人数的方法* param $usersService StudentService 学生服务类* param $class_id int 班级id* param $unit string 单位* return void*/public function getStudentNum(StudentService $usersService, $class_id, $unit 人) {echo $class_id . 班有 . $usersService-getStudentNum($class_id) . $unit . PHP_EOL;} }//初始化Language类并调用getStudentNum方法且传参传参的过程相当与前端请求接口携带的参数。整体相当于框架的路由 (new AutoNew())-init(StudentController::class, getStudentNum, [class_id 7, unit 名学生]);//结果如下 构造方法被调用了 7班有123名学生
http://wiki.neutronadmin.com/news/19019/

相关文章:

  • 做网站 网上接单英文商城网站模板
  • 400电话单页网站哈尔滨优化推广公司
  • 烟台H5高端网站建设网站作业二级网页
  • 附近做网站的公司北京网站开发一般多少钱
  • 如何做织梦手机网站网站的建设期
  • 屏边县住房和城乡建设局网站app关键词推广
  • 做网站站长开通vip建筑焊工证查询网站官方网
  • 运营派网站网页设置背景颜色
  • 双语版网站西安专业的网站开发公司
  • 手机购物网站模板下载如何做可以赚钱的网站
  • 2018年临沂建设局网站网站开发用到的虚拟机有哪些
  • 如何给网站增加关键词千图网免费设计图片素材网
  • 兰州网站建设设计江阴安泰物流有限公司网站谁做的
  • 网站开发计什么科目青岛网站建设维护
  • 网站建设 中企动力烟台广州刚刚通报
  • 做机械外贸什么网站好泰安房产网网上交易中心
  • 手机app ui设计在线网站网站在线帮助如何设计
  • 付费网站怎么做小企业网站建设和管理
  • 海宁做网站iis wordpress index.php
  • 网站建设方案平台架构优良的网站邮箱服务器提供商isp
  • 世界杯哪个网站做代理调用wordpress相关文章
  • 3g医院网站模板如何成立一个网站
  • 如何搭建一个公司网站seo中文全称是什么
  • 网站备案 99网站建设和前端开发的区别
  • 珠宝商城网站模板免费下载评析网站建设报价单
  • 如何做贷款网站网站建设公司的商业模式
  • 可以在线编程的网站国家企业信用信息公示网官网查询
  • 表格布局的网站网站没备案怎么做淘宝客
  • 重庆seo网站建设优化网站建设项目管理论文
  • 大屏手机网站代运营公司哪里有