zoukankan      html  css  js  c++  java
  • 自行实现PHP代码注解特性

    PHP 注解

    到目前为止,PHP的反射特性中是不支持注解Annotation的,但是可以支持基本的文档注释内容的获取 ReflectionMethod::getDocComment() - 从5.1.0开始 。PHP的反射其实已经挺强大的了,只要再进一步,解析文档注释中的相关注解内容即可。

    AppServer.io 提供了一个lang库,实现了对注解的支持。其中还运用了PHP的Tokenizer特性来解析注解代码,具体原理不详述,有兴趣自行阅读代码。
    https://github.com/appserver-io/lang

    其关于注解的说明见:http://appserver.io/get-started/documentation/annotations.html

    在此摘录其演示代码如下:

    <?php
    
    namespace NamespaceModule;
    
    use AppserverIoAppserverLangReflectionReflectionClass;
    use AppserverIoAppserverLangReflectionReflectionAnnotation;
    
    class Route extends ReflectionAnnotation
    {
    
      /**
       * Returns the value of the name attribute.
       *
       * @return string The annotations name attribute
       */
      public function getPattern()
      {
        return $this->values['pattern'];
      }
    }
    
    class IndexController
    {
    
      /**
       * Default action implementation.
       * 
       * @return void
       * @Route(pattern="/index/index")
       */
      public function indexAction()
      {
        // do something here
      }
    }
    
    // create a reflection class to load the methods annotation 
    $reflectionClass = new ReflectionClass('IndexController');
    $reflectionMethod = $reflectionClass->getMethod('indexAction');
    $reflectionAnnotation = $reflectionMethod->getAnnotation('Route');
    $pattern = $reflectionAnnotation->newInstance()->getPattern();
    

    通过这种特性,可以实现注解的方式指定方法的url路由模式 /index/index

  • 相关阅读:
    第10组 Beta冲刺 (3/5)
    第10组 Beta冲刺 (2/5)
    第10组 Beta冲刺 (1/5)
    软工实践个人总结
    第03组 每周小结(3/3)
    第03组 每周小结(2/3)
    第03组 每周小结(1/3)
    第03组 Beta冲刺 总结
    第03组 Beta冲刺 (5/5)
    第03组 Beta冲刺 (4/5)
  • 原文地址:https://www.cnblogs.com/x3d/p/php-annotations.html
Copyright © 2011-2022 走看看