On Tue, Oct 27, 2009 at 9:30 PM, Raymond Irving <xwis...@yahoo.com> wrote:

> 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
>


Hi Raymon

I think your main problem here is that you do not know which class you will
instantiate.
This can lead to undefined behaviour.

Maybe you need to re-analyse your solution.

cheers,
 Martin Scotta

Reply via email to