当前位置:首页 > PHP教程 > php高级应用 > 列表

使用PHP反射机制获取函数文档

发布:smiling 来源: PHP粉丝网  添加日期:2022-06-10 09:52:39 浏览: 评论:0 

反射 Reflection

反射可以简单理解为扫描类的属性、方法和注释的能力。

用法

PHP 为我们提供了丰富的方法,使我们可以方便的使用。

  1. $reflect = new ReflectionClass('App\Foo'); 
  2.  
  3. $reflect->getMethods(); // 获取方法的数组 
  4.  
  5. $reflect->getDocComment(); // 获取文档注释 
  6.  
  7. …… 

应用

有时系统需要向用户提供内置方法文档说明来使用,那么我们则可以通过 PHP 反射实现。

创建内置函数类

  1. class FooFunction{ 
  2.  
  3.     /** 
  4.  
  5.      * 获取当前周周一时间戳 
  6.  
  7.      * 
  8.  
  9.      * @return false|string 
  10.  
  11.      */ 
  12.  
  13.     public static function mondayTimeStamp(){ 
  14.  
  15.         $targetTime = strtotime('now'); 
  16.  
  17.         $w = date('w'$targetTime); 
  18.  
  19.         $w = ($w == 0 ? 7 : $w); 
  20.  
  21.         return mktime(0,0,0, date('m'$targetTime), date('d'$targetTime)-($w-1), date('Y'$targetTime)); 
  22.  
  23.     } 
  24.  
  25.     /** 
  26.  
  27.      * 获取当前周周一日期 
  28.  
  29.      * 
  30.  
  31.      * @return false|string 
  32.  
  33.      */ 
  34.  
  35.     public static function mondayDate(){ 
  36.  
  37.         return date('Y-m-d', self::mondayTimeStamp()); 
  38.  
  39.     } 
  40.  

扫描内置函数类,生成文档

  1. // 利用 PHP 反射 
  2.  
  3. $reflect = new ReflectionClass('FooFunction'); 
  4.  
  5. $data = []; 
  6.  
  7. // 获取类中的方法 
  8.  
  9. $methods = $reflect->getMethods(); 
  10.  
  11. foreach ($methods as $method){ 
  12.  
  13.     $methodName = $method->getName(); 
  14.  
  15.     $methodDocStr = $reflect->getMethod($methodName)->getDocComment(); 
  16.  
  17.     // 过滤方法注释前面的(*) 
  18.  
  19.     $pattern = "/[@a-zA-Z\\x{4e00}-\\x{9fa5}]+.*/u"
  20.  
  21.     preg_match_all($pattern$methodDocStr$matches, PREG_PATTERN_ORDER); 
  22.  
  23.     $data[] = [ 
  24.  
  25.         'name' => $methodName
  26.  
  27.         'doc' => $matches[0] 
  28.  
  29.     ]; 
  30.  
  31.  
  32. echo json_encode($data); 

结果:

  1.  
  2.     { 
  3.  
  4.         "name""mondayTimeStamp"
  5.  
  6.         "doc": [ 
  7.  
  8.             "返回当前周周一时间戳"
  9.  
  10.             "@return false|string" 
  11.  
  12.         ] 
  13.  
  14.     }, 
  15.  
  16.     { 
  17.  
  18.         "name""mondayDate"
  19.  
  20.         "doc": [ 
  21.  
  22.             "返回当前周周一日期"
  23.  
  24.             "@return false|string" 
  25.  
  26.         ] 
  27.  
  28.     } 
  29.  
  30. ]

Tags: PHP反射机制 PHP获取函数

分享到: