获取扩展类的类的PHP类名?
我有一个名为获取扩展类的类的PHP类名?,php,class,reflection,Php,Class,Reflection,我有一个名为Plugins的PHP类,在这个类中,我有其他plguin风格的PHP类,它们是从Plugins类扩展而来的 有没有一种方法可以获取从Plugins类扩展而来的所有PHP类名?也许在PHP中使用类似于反射的东西 因此,在我下面的示例中,我可以得到以下值: MyTestPlugin 另一个测试插件 是的,您可以通过反射执行以下操作: Maybe:or@Jeremy Thank这两个词的混合让我得到了想要的结果!我会为其他人发布的。我刚刚发布了一个解决方案,我是在你发布这个答案时
Plugins
的PHP类,在这个类中,我有其他plguin风格的PHP类,它们是从Plugins
类扩展而来的
有没有一种方法可以获取从Plugins
类扩展而来的所有PHP类名?也许在PHP中使用类似于反射的东西
因此,在我下面的示例中,我可以得到以下值:
- MyTestPlugin
- 另一个测试插件
是的,您可以通过反射执行以下操作:
Maybe:or@Jeremy Thank这两个词的混合让我得到了想要的结果!我会为其他人发布的。我刚刚发布了一个解决方案,我是在你发布这个答案时从评论中想到的。这是类似的,但您使用的ReflectionClass非常酷!谢谢,我才意识到我犯了个大错。我试图基本上包括我所有插件的插件文件,然后为找到的每个插件类实例化一个新类。这就是我需要类名的原因,但这也意味着这些类还不会被实例化,所以它们还不会作为子类存在!因此,我可能需要解析实际的PHP文件来获得我的名字,看起来似乎是错的……事实证明,即使该类没有实例化,这些仍然有效,只需定义它,它就会显示出来……完美@JasonDavis如果您不想全部加载,您可以使用令牌\u get\u all
(无论如何,您必须通过文件\u get\u内容
读取文件)。几年前,我遇到了一个类似的问题,在加载前必须检查以避免名称冲突。可能这个方法比我的更有效+1:)问题就在我心里fav@fusion3k也许,但我很感激你的回答…看到不同的做事方式总是很高兴的,整个ReflectionCLass的东西都很有趣,因为在这之前的15年里我从来没有使用过它!我几个月前就发现了!
abstract class Plugins
{
// class properties and methods
}
class MyTestPlugin extends PLugins
{
// class properties and methods
}
class AnotherTestPlugin extends PLugins
{
// class properties and methods
}
$children = array();
foreach( get_declared_classes() as $class )
{
$reflected = new ReflectionClass( $class );
if( $reflected->isSubclassOf( 'Plugins' ) ) $children[] = $class;
}
<?php
abstract class Plugins
{
// class properties and methods
}
class MyTestPlugin extends Plugins
{
// class properties and methods
}
class AnotherTestPlugin extends Plugins
{
// class properties and methods
}
$plugin1 = new MyTestPlugin();
$plugin2 = new AnotherTestPlugin();
$parentClassName = 'Plugins';
foreach(get_declared_classes() as $class){
if(is_subclass_of($class, $parentClassName)){
echo $class.' == is a child class of '.$parentClassName.'<br>';
}
}
?>