2010-03-27 4 views
14

저는 소수의 규모이지만 약간의 프로젝트를 위해 고도로 맞춤화 된 문서 사이트를 만들고 싶습니다. PhpDocumentor은 꽤 좋지만 매우 무겁습니다. 나는 그것을 위해 템플릿을 조정하려고 생각했지만 불과 몇 분을 들여보고 나서 너무 많은 작업이 될 것이라고 결정했다.PHP DocBlock 파서 도구가 있습니까?

이상적으로 나는 파일 묶음을 전달할 수 있고 메타 데이터와 함께 모든 파일, 클래스 및 속성과 메서드를 반환해야한다는 것을보고 싶습니다. 그래서 몇 가지 간단한 데이터를 기반으로하는 템플릿.

이 작업에서 도움이되는 DocBlock 파서 전용 프로젝트가 있습니까? 아니면 내가 그 바퀴를 다시 만들어야할까요?

답변

20

당신은 자신이 Reflection API:

/** 
* This is an Example class 
*/ 
class Example 
{ 
    /** 
    * This is an example function 
    */ 
    public function fn() 
    { 
     // void 
    } 
} 

$reflector = new ReflectionClass('Example'); 

// to get the Class DocBlock 
echo $reflector->getDocComment() 

// to get the Method DocBlock 
$reflector->getMethod('fn')->getDocComment(); 

쉽게이 튜토리얼이 참조 할 수 있습니다 또한 DocBlocks을 구문 분석 할 수있는 PEAR package있다 http://www.phpriot.com/articles/reflection-api

.

+0

리플렉션을 사용하려면 관심 클래스를 포함하는 PHP 스크립트를로드해야합니까? 임의로 긴 PHP 스크립트 목록을 작성하려면 어떻게해야합니까? –

+0

@Ira http://php.net/manual/en/reflectionclass.getdoccomment.php의 예제를 참조하십시오. 클래스 용 파일을 구문 분석하려면 http://github.com/these/Autoload/blob을 사용할 수 있습니다. /master/src/classfinder.php 디렉토리를 반복 할 수 있습니다 http://php.net/manual/en/class.recursivedirectoryiterator.php – Gordon

-2

구문 분석 된 특정 세부 정보를 내보낼 수있는 PHP 구문 분석기가 필요합니다.

우리의 Semantic Designs PHP Front End은 완전한 PHP 4/5 파서 (2016 년 PHP 7 포함)를 제공합니다. PHP 소스 코드를 파싱하고, 추상 구문 트리를 만들고, 정확한 위치 정보로 각 노드를 스탬핑하고 추가 사용을 가능하게합니다. 그것이 할 수있는 한 가지 일반적인 일은 모든 텍스트를 다시 원래 텍스트로 출력하는 것입니다.

경우에 따라 나무를 스캔하고 클래스/메소드/속성 (트리 노드로)을 찾고 원본 텍스트를 위치 정보와 함께 인쇄 할 수 있습니다. 나는 그것이 당신이 원하는 것을 정확하게 전달할 것이라고 생각합니다.

+2

Ira Baxter, 이것은 제가 만난 상용 제품의 다섯 번째 광고와 같습니다 PHP DocBlocks와 관련된 문제를 해결하려고하는 동안. 명시 적으로 광고 된 제품의 공급 업체와 귀하의 제휴 관계를 명시 적으로 공개하지 않은 광고는 없습니다. –

+0

당신은 문제에 대한 상업적 해결책에 대한 이의 제기에서 "광고"라고 부릅니다. 이 문서는 OP가 제안한 문제에 대한 해결책을 제시하고 있으며, 이는 합법적 인 대답입니다. 내 답변 중 일부는 내 소속을 분명히 나타내지 않았지만 이의 제기는 SO의 생활 초기에 때로는 사실 이었지만 내 생체가 내가 연관되어 있다는 사실에 대해 매우 분명히 알았지 만 이의 제기가있었습니다. 매우 초기 반응 중 하나입니다. .... –

+0

... 제휴를 나타내는 문제는 오래 전에 해결되었습니다. 만약 당신이 주장한다면, 당신은 메타에서 토론을 들여다 볼 수 있습니다. 결의안은 그러한 연계를 나타 내기 위해 "우리"라는 단어의 사용을 허용하는 것이 었습니다. 이 특정 답변은 정책이 있기 전에 작성되었으므로 정책을 따르지 않았습니다. 나는 지금 정책을 따르는 대답을 편집 중이다. 당신이하지 않는 다른 사람들을 알고 있다면 이메일 (또는 여기에 의견)을 통해 나에게 목록을 보내면 나는 그에 맞게 수정할 것입니다. 결의안 이후 나는 정책을 철저히 따랐다. –

5

답변을 업데이트하기 만하면됩니다. phpDocumentor2 프로젝트를 확인하고 싶을 수도 있습니다. 필자는 PHP DocBlock 파서가 독립형 솔루션으로 쉽게 추출 될 수 있다고 생각합니다.

사람이 정규 표현식을 필요로하는 경우에
+2

DocBlox가 phpDocumentor와 병합되어 [phpDocumentor2]가됩니다 (http://github.com/phpDocumentor/phpDocumentor2). – quantme

+0

phpDocumentor가 좋다는데 동의하지만, OP는 명시 적으로 ** phpDocumentor가 아닌 것을 묻습니다. – icc97

6

(xdazzsuggested이 시도하고 student310는/자신의 요구에 그녀를 위해 작동 주석)

if (preg_match_all('/@(\w+)\s+(.*)\r?\n/m', $str, $matches)){ 
    $result = array_combine($matches[1], $matches[2]); 
} 

예 (Demo) :

<?php 
$str =' 
/**  
* @param integer $int An integer 
* @return boolean 
*/ 
'; 
if (preg_match_all('/@(\w+)\s+(.*)\r?\n/m', $str, $matches)){ 
    $result = array_combine($matches[1], $matches[2]); 
} 

var_dump($result); 
3

furgas pointed out으로 수년간 phpDocumentor을 사용해 왔습니다. 독립 실행 형 프로젝트로 잘 작동합니다.

<?php 
$class = new ReflectionClass('MyClass'); 
$phpdoc = new \phpDocumentor\Reflection\DocBlock($class); 

var_dump($phpdoc->getShortDescription()); 
var_dump($phpdoc->getLongDescription()->getContents()); 
var_dump($phpdoc->getTags()); 
var_dump($phpdoc->hasTag('author')); 
var_dump($phpdoc->hasTag('copyright')); 
관련 문제