Search code examples
phpreflectioncommentsphpdoc

PHP reflection; extracting non-block comments


I've recently become familiar with Reflection, and have been experimenting with it, especially getDocComment(), however it appears that it only supports /** */ comment blocks.

/** foobar */
class MyClass{}

$refl = new ReflectionClass('MyClass');

// produces /** foobar */
echo $refl->getDocComment();

-Versus-

# foobar
class MyClass{}

$refl = new ReflectionClass('MyClass');

// produces nothing
echo $refl->getDocComment();

Is it not possible to capture this without resorting to any sort of file_get_contents(__FILE__) nonsense?


As per dader51's answer, I suppose my best approach would be something along these lines:

// random comment

#[annotation]

/**
 * another comment with a # hash
 */

#[another annotation]

$annotations
    = array_filter(token_get_all(file_get_contents(__FILE__)), function(&$token){
    return (($token[0] == T_COMMENT) && ($token = strstr($token[1], '#')));
});

print_r($annotations);

Outputs:

Array
(
    [4] => #[annotation]

    [8] => #[another annotation]

)

Solution

  • DocComments distinguish themselves by saying something about how your classes are to be used, compared to regular comments that could assist a developer in reading the code. That's also why the method isn't called getComment() instead.

    Of course it's all text parsing, and someone just made a choice in docComments always being these multiline comments, but that choice has apparently been made, and reading regular comments is not something in the reflection category.