Re: How to Get the Sub Classes of a Parent Class

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

 



On Tue, Oct 27, 2009 at 9:30 PM, Raymond Irving <xwisdom@xxxxxxxxx> 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 <martinscotta@xxxxxxxxx>
>
> *To:* Raymond Irving <xwisdom@xxxxxxxxx>
> *Cc:* David Otton <phpmail@xxxxxxxxxxxxxxxxxxxxxxx>; PHP-General List <
> php-general@xxxxxxxxxxxxx>
> *Sent:* Mon, October 26, 2009 8:34:05 PM
>
> *Subject:* Re:  How to Get the Sub Classes of a Parent Class
>
>
> On Mon, Oct 26, 2009 at 10:22 PM, Raymond Irving <xwisdom@xxxxxxxxx>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 <phpmail@xxxxxxxxxxxxxxxxxxxxxxx>
>> To: Raymond Irving <xwisdom@xxxxxxxxx>
>> Cc: PHP-General List <php-general@xxxxxxxxxxxxx>
>> Sent: Sun, October 25, 2009 10:25:27 AM
>> Subject: Re:  How to Get the Sub Classes of a Parent Class
>>
>> 2009/10/25 Raymond Irving <xwisdom@xxxxxxxxx>:
>>
>> > 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

[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