反射获取function源码
继承ReflectionFunction,扩展getSource方法:
<?php
/*
___ __ _ ____ ____
/ | ____/ /____ _ ____ ___ (_)____ / __ \ / __ \
/ /| | / __ // __ `// __ `__ \ / // __ \/ /_/ // / / /
/ ___ |/ /_/ // /_/ // / / / / // // / / /\__, // /_/ /
/_/ |_|\__,_/ \__,_//_/ /_/ /_//_//_/ /_//____/ \____/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
做一款产品 愉悦自己
****************Powered by Adamin90********************
* @email: 14846869@qq.com
* Date: 2018/12/27
* Time: 20:00
* @link: https://www.lixiaopeng.top
*******************************************************
*/
namespace app\common\logic;
class FunctionExtract extends \ReflectionFunction
{
/**
* @return bool|string
* @author Adam
* Time: 2018/12/27 20:30
* Description:获取function源码
*/
public function getSource(){
if(!file_exists($this->getFileName())){
return false;
}
$startoffset=$this->getStartLine()-1;
$endoffset=$this->getEndLine()-$this->getStartLine()+1;
// return $this->getFileName();
return join('',array_slice(file($this->getFileName()),$startoffset,$endoffset));
}
public function index(){
echo $this->getSource('id_decode');
}
}使用方法:
实例化 FunctionExtract类,构造器传入funtion名称即可
$fc = new FunctionExtract("get_avatar");
echo $fc->getSource();输出结果:
function get_avatar($uid) { $avatar = Db::name('user')->where('id', $uid)->value('avatar'); if (!empty($avatar)) { $path = get_file_path($avatar); if($path !== false) { return $path; } } //默认头像地址 return '/static/mobile/images/avatar.jpg'; }反射获取Method源码
继承ReflectionMethod,自定义getSource方法
class MethodExtract extends \ReflectionMethod
{
/**
* @return bool|string
* @author Adam
* Time: 2018/12/27 20:35
* Description:利用反射提取Mechod方法
*/
public function getSource(){
if(!file_exists($this->getFileName())){
return false;
}
$startoffset=$this->getStartLine()-1;
$endoffset=$this->getEndLine()-$this->getStartLine()+1;
return join('',array_slice(file($this->getFileName()),$startoffset,$endoffset));
}
}使用:
$tm = new MethodExtract('app\mobile\controller\Area', 'citylist');
echo $tm->getSource();反射获取class源码
继承ReflectionClass类,自定义getSource方法
class ClassExtract extends \ReflectionClass
{
/**
* @return bool|string
* @author Adam
* Time: 2018/12/27 20:36
* Description:反射获取类源码
*/
public function getSource()
{
if (!file_exists($this->getFileName())) {
return false;
}
$startoffset = $this->getStartLine() - 1;
$endoffset = $this->getEndLine() - $this->getStartLine() + 1;
return join('', array_slice(file($this->getFileName()), $startoffset, $endoffset));
}
}使用:
$ce = new ClassExtract('app\mobile\controller\Area');
echo $ce->getSource();完美
本文为Adamin90原创文章,转载无需和我联系,但请注明来自http://www.lixiaopeng.top
