海门网站建设,大型车网站建设,我想做代加工,河北永生建筑工程网站在相对复杂的项目中#xff0c;我们可以使用分层来减少代码耦合#xff0c;并封装一些常用方法来加快开发速度. 因此#xff0c;在实际开发中#xff0c;代码可以分为: 控制器层#xff0c;服务层#xff0c;逻辑层#xff0c;模型层等. 服务层: 所谓的服务层#xff0… 在相对复杂的项目中我们可以使用分层来减少代码耦合并封装一些常用方法来加快开发速度. 因此在实际开发中代码可以分为: 控制器层服务层逻辑层模型层等. 服务层: 所谓的服务层我们可以理解为一个统一的输出层控制器访问数据必须通过服务层进行访问以保证数据访问的一致性. 因此当数据结构发生变化时我们只需要修改数据层或逻辑层而控制器仅需要访问服务层而不管逻辑层和模型层中的任何操作和更改. 在实际应用中我们发现服务层和逻辑层中有很多重复的方法和代码. 那么php调用类的方法有什么方法可以减少代码的重复性 首先我们使用php的__call方法将服务层的请求转移到逻辑层那么如何在不知道该方法有多少参数的情况下调用该方法呢 反射 即使将类成员定义为私有成员也可以从外部访问它. 您也可以访问类成员和方法而无需创建类的实例. PHP从5.0版开始增加了一种反射机制. 它提供了一组功能强大的反射API使您可以在PHP运行时环境中访问和使用类方法属性参数和注释. 它的功能非常强大. 它通常用于高扩展PHP框架中自动加载插件自动生成文档甚至可以用于扩展PHP语言. 因为它是PHP的内置oop扩展所以它是语言本身的功能因此可以使用它而无需其他扩展或配置. 下面我们使用PHP反射来实现php调用类的方法而无需实例化逻辑层调用其方法并完成结构返回. 首先我们在__call中收到要调用的方法和传递的参数. public function __call($func, $arguments) { return $this-invokeLogicObjectFunc($func, $arguments); } 接下来我们使用反射来实现调用过程: final private function invokeLogicObjectFunc($func, $arguments) { $class $this-logicLayer.$this-logicName; if(!class_exists($class)) { throw new Exception(class .$this-logicName. not exist); } $object new \ReflectionClass($class); if(!$object-hasMethod($func)) { throw new Exception(method .$func. in class .$this-logicName. is not exist); } $objectInstance $object-newInstance(); $reflectionMethod new \ReflectionMethod($class, $func); //检测成员方法是否存在 if(empty($reflectionMethod)) { throw new Exception(class .$this-logicName. not exist method. $func); } //校验成员方法是否是public if (!$reflectionMethod-isPublic()) { throw new Exception(class . $this-logicName. method is not allow access); } $parameters $reflectionMethod-getParameters(); if (empty($parameters)) { return $reflectionMethod-invoke($objectInstance); } else { return $reflectionMethod-invoke($objectInstance, ...$arguments); } } 注意: 调用也可以使用invokeArgs来实现. 此外我们还可以使用PHP反射来实现API文档的主动生成(使用反射来获取批注解析为API文档)自动调用类等. 本文来自电脑杂谈转载请注明本文网址 http://www.pc-fly.com/a/ruanjian/article-254676-1.html