Получить комментарии в php-файле

Я пытался получить комментарии из определенного .php файла на моем сервере, чтобы разобрать его переменные. Я думал, что Ii нашел простой способ сделать это, однако функция, которую я использую, ничего не возвращает, хотя у меня явно есть комментарии в файле.

Вот комментарии, которые я использую:

 /** * @param foo bar * @return baz */ 

Вот мой код:

 function GetComments($filename) { $expr = "/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/"; $file = fopen($filename, "r"); $length = filesize($filename); $comments = fread($file, $length); fclose($file); preg_match_all($expr, $comments, $matches); foreach($matches[0] as $id => $variable){ $comments = str_replace($variable,'',$comments); } return $comments; } 

Есть ли что-то, что я делаю неправильно? Потому что, если это так, я явно смотрю на это.

Любая помощь будет очень желанной.

РЕДАКТИРОВАТЬ:

Я нашел ответ:

Прежде всего, я должен был, наверное, отметить в своем вопросе, что я пытаюсь написать систему для чтения плагинов. Эти файлы плагинов должны содержать блок комментариев в верхней части, содержащий переменные, такие как автор плагина, веб-сайт, электронная почта и т. Д.

так вот что я сделал:

Я принял пример сборной, чтобы изменить свою функцию, чтобы получить комментарии и переменные.
Затем я изменил код, чтобы он соответствовал моим потребностям:

 public function GetComments($filename) { $docComments = array_filter(token_get_all(file_get_contents($filename)), function($entry) { return $entry[0] == T_COMMENT; }); $fileDocComment = array_shift($docComments); $regexp = "/\@.*\:\s.*\r/"; preg_match_all($regexp, $fileDocComment[1], $matches); for($i = 0; $i < sizeof($matches[0]); $i++) { $params[$i] = split(": ", $matches[0][$i]); } return($params); } 

Я поставил результат кода, который мне дал через регулярное выражение, в результате чего массив, содержащий параметры и их значения, был объединен.
Затем я использовал функцию split, чтобы дать мне отдельные параметры и значения, поэтому я мог бы вернуть их к переменной, называемой функцией.

Чтобы это правильно работало, мне нужно было изменить стиль комментария, который я использовал

 /** * @param foo bar * @return baz */ 

в

 /* @param: foo bar @return: baz */ 

что делает его нормальным блоком комментариев, а не блоком комментариев doc.
И это также позволило мне использовать ':' как шаблон для функции split.

Это может быть «не так эффективно» в глазах некоторых. Как отметил г-жа Валле, «что изменится ваш стиль комментариев?». Я буду единственным, кто работает над этим проектом и написав плагины. Поэтому для меня не слишком сложно сохранить стиль комментария одинаковым в каждом сценарии плагина.
Этот метод отлично работает для меня.

Спасибо всем за вашу помощь в этом.

Solutions Collecting From Web of "Получить комментарии в php-файле"

Вы можете использовать token_get_all() , который «анализирует данную исходную строку PHP в token_get_all() языка, используя лексический сканер двигателя Zend».

См .: http://php.net/token_get_all

Вот пример, который я использовал один раз, чтобы получить файл-doc-комментарий из текущего файла:

 /** * Return first doc comment found in this file. * * @return string */ function getFileDocBlock() { $docComments = array_filter( token_get_all( file_get_contents( __FILE__ ) ), function($entry) { return $entry[0] == T_DOC_COMMENT; } ); $fileDocComment = array_shift( $docComments ); return $fileDocComment[1]; } 

Попробуйте использовать http://ca3.php.net/manual/en/class.reflectionclass.php

и http://ca3.php.net/manual/en/class.reflectionfunction.php

Это все, что вам нужно, чтобы получить параметры функции.