当前位置: 首页 > 后端技术 > PHP

PHP通过反射获取类,一些基础应用

时间:2023-03-29 13:53:30 PHP

这几天在看laravel框架的核心代码。发现使用了大量的反射机制。让我们简单看一下一些反射应用classA{private$_foo='thisisa';publicfunctionindex(){return$this->_foo;}privatefunction_come($param){return'thisiscome'.$param;}}$refClass=newReflectionClass('A');//获取反射让我们使用这个反射获取A的私有属性$privateParams=$refClass->getDefaultProperties();print_r($privateParams);//获取结果Array([_foo]=>thisisa)echo$privateParams['_foo'];//获取thisisa这样我们就可以很方便的获取到A的private属性。那么如何执行private方法。接下来我们看一下公共方法的实现,比较简单。/****************获取类的实例******************/$class=$refClass->newInstance();echo$class->index();这样就可以调用公共方法了。下面看看执行私有方法的方法/***************GetA******************/$refHasClass=$refClass->getMethods();print_r($refHasClass);/****Array([0]=>ReflectionMethodObject([name]=>index[class]=>A)*[1]=>ReflectionMethodObject([name]=>_come[class]=>A))*/$come=$refClass->getMethod('_come');$come->setAccessible(true);echo$come->invoke($class,'thisisparam');//thisisathisiscomethisisparam可以先通过getMethod()获取come方法,然后设置come方法的可访问性。最后,还有很多方法可以通过invoke来执行方法反射,这里就不一一说了。有兴趣的可以看看官方文档的原文地址