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