PHP ile bir Phpdoc tarzı yorum bloğu ayrıştırmak nasıl?

1 Cevap php

Ben (dosya içeriğini test amacıyla $ veri değişkeni koymak) bir dosyaya (diğer kütüphaneleri kullanarak değil) sadece ilk Phpdoc tarzı yorum ayrıştırmak çalışıyorum hangi ile aşağıdaki kodu düşünün lütfen:

$data = "
/**
 * @file    A lot of info about this file
 *          Could even continue on the next line
 * @author  me@example.com
 * @version 2010-05-01
 * @todo    do stuff...
 */

/**
 * Comment bij functie bar()
 * @param Array met dingen
 */
function bar($baz) {
  echo $baz;
}
";

$data =  trim(preg_replace('/\r?\n *\* */', ' ', $data));
preg_match_all('/@([a-z]+)\s+(.*?)\s*(?=$|@[a-z]+\s)/s', $data, $matches);
$info = array_combine($matches[1], $matches[2]);
print_r($info)

Bu neredeyse everything (bar() açıklama bloğu ve kodu dahil) @ yapılacaklarıma sonrası değeri olarak kabul edilir gerçeği dışında, çalışan @todo:

Array (
    [file] => A lot of info about this file Could even continue on the next line
    [author] => me@example.com
    [version] => 2010-05-01
    [todo] => do stuff... /

    /** Comment bij functie bar()
    [param] => Array met dingen /
    function bar() {
      echo ;
    }
)

Ayrıştırma ilk "* /" ile karşılaştı sonra durmalıdır: Nasıl benim kod (diğer bir deyişle sadece ilk yorum blok ayrıştırılır ediliyor, böylece değişmiş olması gerekir?

1 Cevap

PCRE'yi kullanarak bir ayrıştırıcı yazma sıkıntılara yol açacaktır. Ben ilk simgeleştiricisine (http://www.php.net/tokenizer) veya yansıma (http://www.php.net/manual/en/reflectionclass.getdoccomment.php) güvenmek öneririm. Sonra aslında (tüm kütüphaneleri de yapmak sona ne) phpdoc biçimi tarafından desteklenen tüm durumlarda işleyebilir doc blok için bir ayrıştırıcı uygulamak için daha güvenlidir.