如何获得PHP中的类名?

public class MyClass { } 

在Java中,我们可以使用String className = MyClass.class.getSimpleName();来获取类名String className = MyClass.class.getSimpleName();

如何在PHP中做到这一点? 我已经知道get_class() ,但它只适用于对象。 目前我在Active Record工作。 我需要声明像MyClass::className

从PHP 5.5开始,您可以通过ClassName :: class使用类名parsing。

查看PHP5.5的新function 。

 <?php namespace Name\Space; class ClassName {} echo ClassName::class; ?> 

如果你想在你的类方法中使用这个特性,可以使用static :: class

 <?php namespace Name\Space; class ClassName { /** * @return string */ public function getNameOfClass() { return static::class; } } $obj = new ClassName(); echo $obj->getNameOfClass(); ?> 

对于较早的PHP版本 ,可以使用get_class() 。

您可以在类中使用__CLASS__来获取名称。

http://php.net/manual/en/language.constants.predefined.php

现在,我已经回答了我的问题。 感谢Brad的链接,我在这里find答案。 并感谢J.Money的想法。 我的解决scheme

 <?php class Model { public static function getClassName() { return get_called_class(); } } class Product extends Model {} class User extends Model {} echo Product::getClassName(); // "Product" echo User::getClassName(); // "User" 

这听起来像你回答了你自己的问题。 get_class将会得到你的类名。 这是程序性的,也许这是造成混乱的原因。 看看get_class的php文档

这是他们的例子:

  <?php class foo { function name() { echo "My name is " , get_class($this) , "\n"; } } // create an object $bar = new foo(); // external call echo "Its name is " , get_class($bar) , "\n"; // It's name is foo // internal call $bar->name(); // My name is foo 

为了使它更像你的例子,你可以做一些事情:

  <?php class MyClass { public static function getClass() { return get_class(); } } 

现在你可以做:

  $className = MyClass::getClass(); 

但是,这是有限的,因为如果我的类被扩展,它仍然会返回'MyClass'。 我们可以使用get_called_class ,它依赖于Late Static Binding ,一个相对较新的特性,并且需要PHP> = 5.3。

 <?php class MyClass { public static function getClass() { return get_called_class(); } public static function getDefiningClass() { return get_class(); } } class MyExtendedClass extends MyClass {} $className = MyClass::getClass(); // 'MyClass' $className = MyExtendedClass::getClass(); // 'MyExtendedClass' $className = MyExtendedClass::getDefiningClass(); // 'MyClass' 

我认为在PHP中提到“自我”和“静态”之间的差别是很重要的,因为“最佳答案”使用“静态”,这会给某些人带来混乱的结果。

 <?php class X { function getStatic() { // gets THIS class of instance of object // that extends class in which is definied function return static::class; } function getSelf() { // gets THIS class of class in which function is declared return self::class; } } class Y extends X { } class Z extends Y { } $x = new X(); $y = new Y(); $z = new Z(); echo 'X:' . $x->getStatic() . ', ' . $x->getSelf() . ', Y: ' . $y->getStatic() . ', ' . $y->getSelf() . ', Z: ' . $z->getStatic() . ', ' . $z->getSelf(); 

结果:

 X: X, X Y: Y, X Z: Z, X 
 <?php namespace CMS; class Model { const _class = __CLASS__; } echo Model::_class; // will return 'CMS\Model' 

PHP 5.5更旧

 $foo = (new \ReflectionClass($this))->getShortName();