2016-07-18 11 views
3

私はPHPで次のコードを持っている:クラス定数のPHPDocコメントを取得する方法はありますか?

abstract class ProjectVars 
{ 
    /** 
    * Defines whether a user is logged in as ... 
    */ 
    const loggedInAs = [...]; 

    [...] 
} 

私は、文字列Defines whether a user is logged in as ...にアクセスしたいと思います。明らかに、より多くの定数があり、すべての定数の文字列を取得したいと思います。 これは可能ですか?リフレクションクラスでは、クラス全体のPHPDocコメントを取得するのに

$rc = new ReflectionClass('ProjectVars'); 
var_dump($rc->getDocComment()); 

を使用できます。私は、クラス定数のPHPDocを読み込むためのメソッドを見つけられませんでした。これを行う方法はありますか?

答えて

0

はい、あります:あなたがすでに知っているようにReflection APIを使用していますが、すべてのコメントを出力する関数を作成することでもう少しかかります。 しかし、このアプローチでは、クラス内の静的メソッドを静的に作成するだけで静的に呼び出すことができます。別の方法は、引数(クラスの名前)を取る1つの静的メソッドで簡単なヘルパークラスを作成することです。したがって

<?php 

     abstract class ProjectVars { 
      /** 
      * Defines whether a user is logged in as ... 
      */ 
      protected $loggedIn; 

      /** 
      * Determines whether the user is registered or not 
      * @var bool; 
      */ 
      protected $register; 

      /** 
      * Holds information about user's surfing/visit history 
      * @var string; 
      */ 
      protected $records; 




      public static function getClassComments(){ 
       $refClass   = new ReflectionClass(self::class); 
       $comments   = array(); 

       foreach ($refClass->getProperties() as &$refProperty) { 
        $comments[$refProperty->getName()] = trim(preg_replace("#((\/)?(\*{1,2})(\/)?)#si", "", $refProperty->getDocComment())); 
       } 
       return $comments; 
      } 
     } 


     var_dump(ProjectVars::getClassComments()); 
     // PRODUCES:  
     array (size=3) 
      'loggedIn' => string 'Defines whether a user is logged in as ...' (length=42) 
      'register' => string 'Determines whether the user is registered or not 
        @var bool;' (length=63) 
      'records' => string 'Holds information about user's surfingvisit history 
        @var string;' (length=68) 

財産に関するすべてのコメントをアクセスするために言う:loggedInまたはregisterまたはrecords、あなたがしなければならないことすべては、このようなものです:

    ProjectVars::getClassComments()['loggedIn']; 
       ProjectVars::getClassComments()['register']; 
       ProjectVars::getClassComments()['records']; 

次のコードは、両方のアプローチを示しています2ND APPROACH:SIMPLEを使用して、ヘルパークラス

<?php 

     class CommentAnalyser{ 

      public static function getClassCommentsFor($fullyQualifiedClassName){ 
       $refClass   = new ReflectionClass($fullyQualifiedClassName); 
       $comments   = array(); 

       foreach ($refClass->getProperties() as &$refProperty) { 
        $comments[$refProperty->getName()] = trim(preg_replace("#((\/)?(\*{1,2})(\/)?)#si", "", $refProperty->getDocComment())); 
       } 
       return $comments; 
      } 
     } 


     var_dump(CommentAnalyser::getClassCommentsFor('ProjectVars')); 
     // PRODUCES:  
     array (size=3) 
      'loggedIn' => string 'Defines whether a user is logged in as ...' (length=42) 
      'register' => string 'Determines whether the user is registered or not 
        @var bool;' (length=63) 
      'records' => string 'Holds information about user's surfingvisit history 
        @var string;' (length=68) 

モックアップHERE

乾杯とグッドラック...

+0

ほんの少しの注意:交換する正規表現は、「サーフィン/訪問」でスラッシュをとりこに。 –

+0

@RuslanBesおかげでメイト....あなたは正しいです...それを一瞬で見てください...しかしあなたはアイデアを得る... ;-) – Poiz

関連する問題