可以从PHP中未实例化的对象中获取当前类的名称吗?

Possible to get name of current class from an uninstantiated object in PHP?

提问人:Andrew G. Johnson 提问时间:1/25/2009 更新时间:3/15/2013 访问量:4437

问:

我知道您可以正常使用 get_class($this),但我需要在对象尚未实例化的静态函数中获取类的名称。

请参见以下代码:

class ExampleClass
{
    static function getClassName()
    {
        echo get_class($this); // doesn't work unless the object is instantiated.
    }
}

$test1 = new ExampleClass();
$test1->getClassName(); // works

ExampleClass::getClassName(); // doesn't work
PHP的

评论

0赞 Eddie Parker 1/25/2009
你可能想编辑你的问题,以阅读你理解$this在静态情况下没有意义 - 我认为有些人可能只是认为你不明白“$this”是什么意思。也请看我关于get_called_class的回答。

答:

3赞 Andrew G. Johnson 1/25/2009 #1

我发现你可以用__CLASS__来获取类名。例:

class ExampleClass
{
    static function getClassName()
    {
        echo __CLASS__;
    }
}

评论

7赞 troelskn 1/25/2009
请注意,CLASS 将返回定义函数的类。如果扩展它,则不会获得子类。
1赞 Crescent Fresh 1/25/2009
@troelskn:很可能会咬问者的屁股。您也应该将其作为答案提交,以便更多人看到它。
8赞 Eddie Parker 1/25/2009 #2

如果您希望从静态方法中获取类名,我认为您正在寻找 get_called_class() 函数。

有关详细信息,请参阅get_called_class文档

0赞 Kenzal Hunter 1/26/2009 #3

我的问题是,您如何在一开始就不知道类名的情况下调用静态函数?

我能想到的只有两种方法是:

ExampleClass::getClassName(); //Hard Coded - the class name is hard and visible
$class = "ExampleClass";
$class::getClassName();       //Soft Coded - the class name is the value of $class

如果我们知道您尝试拨打电话的背景,也许可以提供更好的解决方案?

评论

0赞 Andrew G. Johnson 1/27/2009
我正在调用一个继承的类,并且父类中有一个 switch() 语句,该语句需要类名来决定要做什么
0赞 Kenzal Hunter 1/27/2009
您尝试从中切换需要静态函数的变量数据是什么?