获取类名,而无需在 PHP 中具有类的实例

  • 本文关键字:实例 PHP 获取 php reflection
  • 更新时间 :
  • 英文 :


我正在寻找以下php函数:

class foo
{
}
echo get_class_special(foo);  // returns the string 'foo'

php 是否有一个函数来获取类的名称而不创建类的实例?

<?php
class Foo {
    const NAME = __CLASS__;
    // or
    public static $NAME = __CLASS__;
    // or
    public static function getName() {
        return __CLASS__;
    }
}
Foo::NAME; // Foo
// or
Foo::$NAME; // Foo
// or
Foo::getName(); // Foo
?>

我感觉PHP中的动态类型存在一些混乱:PHP中没有class类型的对象,类由它们的名称表示。因此,如果您在应用程序中编写foo,您将收到一个 WARNING,并且该foo将被解释为字符串'foo' - 即使存在该名称的类。

因此,如果您需要在变量中存在的类上调用静态函数,则可以这样做:

$class = 'Foo';
$class::staticFuntion(); // will call Foo::staticFunction()

这更进一步,您可以使用变量引用变量:

$className = 'Foo';
$ref = 'className';
$$ref::staticFunction(); // will call Foo::staticFunction()

从 PHP 5.5 开始,您可以使用 foo::class .看到这个答案。

为什么不创建静态函数,如

class foo {
    public static function myClass() {
         return get_class($this);
    }
}

在您的代码中,您可以使用

foo::myClass();  //return string 'foo'

但是在这里你需要知道类的名称来称呼它,所以它在某种程度上是多余的。例如,如果您想获取类的属性而不实例化它,因为它们在开发代码时会发生变化,这将是有意义的。

我想没有

对象的类名是不可能的。但是,如果您的实例只声明了一个类,则可以使用它。

get_declared_classes();

相关内容

  • 没有找到相关文章

最新更新