Re: Class and interface location

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 19, 2011 at 8:21 AM, Richard Quadling <rquadling@xxxxxxxxx>wrote:

> On 19 January 2011 07:46, Adam Richardson <simpleshot@xxxxxxxxx> wrote:
> > On Wed, Jan 19, 2011 at 2:07 AM, Larry Garfield <larry@xxxxxxxxxxxxxxxx
> >wrote:
> >
> >> 3) Static analysis.  Instead of reflection, either tokenize or string
> parse
> >> all files to determine what classes implement what interfaces and then
> >> cache
> >> that information.  We are actually using this method now to locate
> classes,
> >> and it works surprisingly well.  Because we never parse code into memory
> it
> >> does not ever spike the memory usage.  However, it is impossible to
> >> determine
> >> if a class implements a given interface by static analysis unless it
> >> declare
> >> so itself with the implements keyword.  If it does so indirectly via
> >> inheritance, either via the class or via the interface, it would not
> find
> >> it.
> >> That necessitates that any "detectable" classes must explicitly
> themselves
> >> declare their interfaces, even if it is redundant to do so.  I don't
> like
> >> that
> >> approach, but it's the first one that strikes me as even viable.
> >>
> >
> > 4) Explicit declaration.  In this approach we detect nothing and rely on
> the
> >> plugin developer to do everything.  That is, they must provide somewhere
> >> (either in code or a configuration file) an index of all classes they
> >> offer,
> >> the interfaces they implement, and the file in which they live.  While
> this
> >> makes the implementation easy, it is a huge burden on the plugin
> developer
> >> and
> >> I'm quite sure they'll forget to do so or get it wrong on a regular
> basis.
> >>
> >
> > I'd suggest combining 3 and 4.  Build a tool that performs a static
> analysis
> > of a group of files and make it easy for developers to use.  This tool
> would
> > generate the explicit declarations your codebase would utilize when
> > answering such questions as "which classes implement interface foo".  The
> > file the static analysis tool generates could be easily hand editable, so
> > developers could tweak it if they see issues (just in case the static
> > analysis tool has bugs early on), or for small plugins, just quick crank
> out
> > a couple lines by hand.
> >
> > As long as the static analysis tool builds a composite of class hierarchy
> > established in all the files (project wide, at least in terms of the
> > plugin), you wouldn't have to double declare interfaces so they could be
> > detected.
> >
> > Adam
> >
> > --
> > Nephtali:  A simple, flexible, fast, and security-focused PHP framework
> > http://nephtaliproject.com
> >
>
> There is a pecl extension called inclued [1] & [2] which could be used I
> think.
>
> It can be used to produce a list of all the relationships between
> included files, so a one off pass of all the class files (simply
> include them) and then retrieve the analysis from inclued.
>
> You can now build a class dependency tree from that data and cache it.
>
> Pretty much exactly what you need.
>

Richard,

While inclued performs a nice analysis of the files included at a given
stage of a script, I don't see that it performs a static analysis of the PHP
contained within the files so Larry could use it to detect the interfaces
implemented in a given set of PHP files.

I looked at the pages:
http://docs.php.net/manual/en/inclued.examples-implementation.php
http://docs.php.net/manual/en/function.inclued-get-data.php

I'm curious about this feature myself, so if I missed something, please let
me know.

Thanks,

Adam

-- 
Nephtali:  A simple, flexible, fast, and security-focused PHP framework
http://nephtaliproject.com

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux