Как получить имя класса в PHP?

public class MyClass { } 

В Java мы можем получить имя класса с помощью String className = MyClass.class.getSimpleName();

Как это сделать в PHP? Я уже знаю get_class() , но он работает только для объектов. В настоящее время я работаю в Active Record. Мне нужна инструкция типа MyClass::className .

Начиная с PHP 5.5 вы можете использовать разрешение имен классов через ClassName :: class .

См. Новые возможности PHP5.5 .

 <?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

Теперь у меня есть ответ на мою проблему. Спасибо Брэду за ссылку, я нахожу здесь ответ. И благодаря J.Money за эту идею. Мое решение:

 <?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 даст вам имя класса. Это процедурный и, возможно, именно это вызывает путаницу. Взгляните на документацию php для get_class

Вот их пример:

  <?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 этого мы можем использовать 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();