On Mon, Oct 26, 2009 at 10:22 PM, Raymond Irving <xwis...@yahoo.com> wrote:

>
> This works if you know the name of the class. What I'm looking for is a way
> to get one of the sub classes and initialize it dynamically.
>
>
>
>
> ________________________________
> From: David Otton <phpm...@jawbone.freeserve.co.uk>
> To: Raymond Irving <xwis...@yahoo.com>
> Cc: PHP-General List <php-general@lists.php.net>
> Sent: Sun, October 25, 2009 10:25:27 AM
> Subject: Re: [PHP] How to Get the Sub Classes of a Parent Class
>
> 2009/10/25 Raymond Irving <xwis...@yahoo.com>:
>
> > I want to automatically initialize a specific sub class when the php page
> is loaded.
> >
> > I'm looking for a solution for php 5.1+ or anything that's optimized for
> 5.3
>
> You may be able solve this with a simple class_exists() (pseudo-code
> ahead):
>
> if(class_exists($var)) {
>    $class = new $var;
> } else {
>    $class = new FourOhFour;
> }
>

This script only works for loaded classes .
If your script has autoloader then there is no way to know the declared
classes before you declare them.

error_reporting( E_ALL | E_STRICT );

Class Foo {}

Class Bar extends Foo {}
Class Baz extends Foo {}

Class Beer extends Bar {}
Class Pier extends Bar {}

function get_subclasses($class)
{

    $sub = array();

    foreach(get_declared_classes() as $name )
    {
        $rClass = new ReflectionClass($name);

        if( $rClass->isSubclassOf( $class ))
        {
            $sub[] = $name;
        }
    }

    return $sub;
}

print_r( get_subclasses( 'Foo' ));
print_r( get_subclasses( 'Bar' ));

-- 
Martin Scotta

Reply via email to