如何获得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__
来获取名称。
现在,我已经回答了我的问题。 感谢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();