我正在寻找以下php-function:
class foo
{
}
echo get_class_special(foo); // returns the string 'foo'
php是否有一个函数来获取类的名称而不创建类的实例?
答案 0 :(得分:5)
<?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
?>
答案 1 :(得分:3)
我觉得在PHP中存在一些关于动态类型的混淆:在PHP中没有类型为class
的对象,类由它们的名称表示。因此,如果您在应用程序中编写foo
,则会收到警告,并且foo
将被解释为字符串'foo'
- 即使存在该名称的类。
因此,如果需要在变量中存在的类上调用静态函数,可以这样做:
$class = 'Foo';
$class::staticFuntion(); // will call Foo::staticFunction()
更进一步,你可以reference variables with variables:
$className = 'Foo';
$ref = 'className';
$$ref::staticFunction(); // will call Foo::staticFunction()
答案 2 :(得分:1)
As of PHP 5.5您可以使用foo::class
。请参阅this answer。
答案 3 :(得分:0)
为什么不创建像
这样的静态函数class foo {
public static function myClass() {
return get_class($this);
}
}
在您的代码中,您可以使用
foo::myClass(); //return string 'foo'
但是在这里你需要知道要调用它的类的名称,所以它在某种程度上是多余的。如果你想获得类的属性而没有实例化它,因为在开发代码时我会改变它是有意义的。
答案 4 :(得分:0)
我想如果没有它的对象就不可能得到类名。但是如果您的实例只声明了一个类,那么您可以使用它。
get_declared_classes();