当前位置:首页 > 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.  
  41. } 

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

  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.  
  33. echo json_encode($data); 

结果:

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

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

分享到: