【问题标题】:How to find annotations in a PHP5 object?如何在 PHP5 对象中查找注释?
【发布时间】:2012-03-16 18:21:08
【问题描述】:

我希望能够在我的 PHP5 对象中实现自定义注释,并且我想通过构建自己的解析器来了解整个过程是如何工作的。

不过,首先,我需要知道如何查找注释。

是否有我缺少的反射方法,还是有其他方法?

例如,我希望能够在一个类中找到以下注解:

/**
 * @MyParam: myvalue
 */

【问题讨论】:

标签: php parsing annotations docstring


【解决方案1】:

您可以使用ReflectionClass::getDocComment 执行此操作,例如:

function getClassAnnotations($class)
{       
    $r = new ReflectionClass($class);
    $doc = $r->getDocComment();
    preg_match_all('#@(.*?)\n#s', $doc, $annotations);
    return $annotations[1];
}

现场演示:http://codepad.viper-7.com/u8bFT4

【讨论】:

  • 如果文件中有多个cmet,会全部抓取吗?
  • ->getDocComment() 只是获取与您正在检查的对象关联的文档注释(紧接在该事物声明之前的文档块注释)。您还可以获取有关对象、类、方法、函数和属性的 doc cmets。
  • @johnnietheblack 您可以使用php.net/manual/pl/class.reflectionmethod.php - 仅获取指定方法的评论。
  • 啊啊啊,太棒了...所以我可以使用 ReflectionClass 来获取课程的文档注释,然后为他们的 cmets 运行它的方法...
  • @johnnietheblack 您可以使用 getMethods 循环类方法,它返回 ReflectionMethod 对象数组,您可以使用这些对象获取函数注释。
【解决方案2】:

您可以使用getDocComment反射对象方法获取评论块。

如果不想手动检索注解,可以使用Zend Framework Reflection或者其他已有的解决方案

【讨论】:

  • doctrine/annotations 最受欢迎
  • @DanFromGermany, Doctrine\Common\Annotations\AnnotationReder::getClassAnnotations() 似乎明确忽略了 @package@method 之类的东西。我也从未见过privatefinal 的如此多用法,从而阻止了对这个限制的任何可能的覆盖。有没有办法解决这个问题?
猜你喜欢
  • 2021-06-03
  • 2012-10-09
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 2018-01-24
相关资源
最近更新 更多