>From my point of view, the concept of a "file" has become semantically more
important, and increasingly relevant to Reflection, with the latest PHP
features added in the past couple of years.

I can see what you mean though - it's probably not a small effort, and
there are probably more important aspects of PHP that need attention...

2012/1/29 Johannes Schlüter <johan...@schlueters.de>

> Hi,
>
>
> On Sun, 2012-01-29 at 18:51 -0500, Rasmus Schultz wrote:
> > I realized the other day that ReflectionFile is missing from the
> Reflection
> > API.
>
> As is ReflectionNamespace and some others one might think about. In the
> end it boils down to the fact that we don't have structures internally
> representing them as for PHP there is no need to keep the data and then
> we're restrictive in adding such meta-data just for the purpose of
> reflection. Mind that we'd have to keep all that in memory and opcode
> caches have to copy it around etc. in the end the consensus was: the
> effort needed doesn't seem worthwhile.
>
> The alternative would be to "emulate" it, something like
>
>        class ReflectionFile {
>            private $filename;
>            private $classes = array();
>            private $functions = array();
>
>            private initFunctions($filename) {
>                foreach(get_defined_functions()['user'] as $f) {
>                    $rf = new ReflectionFunction($f);
>                    if ($rf->getFilename() == $filename) {
>                        $this->functions[$rf->getName()] = $rf;
>                    }
>                }
>            }
>
>            private initClasses($filename) { /* ... */ }
>
>            public __construct($filename) {
>                $this->filename = realpath($filename);
>                $this->initFunctions($this->filename);
>                /* ... */
>            }
>
>            public getFunctions() {
>                return $this->functions;
>            }
>
>            public getFunctionNames() {
>                return array_keys($this->functions);
>            }
>
>            /* ... */
>        }
>
> But that feels more like a hack than a solution, too.
>
> johannes
>
> PS. Mind that the example you've given even works on files not included
> by parsing files, whereas internal reflection provides information what
> actually is available from engine point of view ...
>
>

Reply via email to