繁体   English   中英

获取类名而不在php中有类的实例

[英]get class name without having an instance of the class in php

我正在寻找以下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 ,你将获得一个警告,并且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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM