Re: How to Get the Sub Classes of a Parent Class
| From: | Raymond Irving | Date: | Wed, 28 Oct 2009 00:30:28 +0000 |
| Subject: | Re: How to Get the Sub Classes of a Parent Class | ||
| References: | 1 2 3 4 5 6 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-299407@lists.php.net to get a copy of this message | ||
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@gmail.com>
To: Raymond Irving <xwisdom@yahoo.com>
Cc: David Otton <phpmail@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 <xwisdom@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 <phpmail@jawbone.freeserve.co.uk>
>To: Raymond Irving <xwisdom@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 <xwisdom@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