Hi Martin,

This works great but I was hoping that I didn't have to loop through 
get_declared_classes to find the sub class. 

Is there a way to get the subclasses using Reflection? For example:

$r = new ReflectionClass($name);
print_r($r->getSubClasses());

Many Thanks




________________________________
From: Martin Scotta <martinsco...@gmail.com>
To: Raymond Irving <xwis...@yahoo.com>
Cc: David Otton <phpm...@jawbone.freeserve.co.uk>; PHP-General List 
<php-general@lists.php.net>
Sent: Mon, October 26, 2009 8:34:05 PM
Subject: Re: [PHP] How to Get the Sub Classes of a Parent Class



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