public class MyClass {
}
В Java мы можем получить имя класса с помощью String className = MyClass.class.getSimpleName();
Как это сделать в PHP? Я уже знаю get_class()
, но это работает только для объектов. В настоящее время работаю в Active Record. Мне нужно заявление вроде MyClass::className
.
public $__CLASS__ = __CLASS__;
танца с каждым другим классом ...Ответы:
Начиная с PHP 5.5 вы можете использовать разрешение имени класса через ClassName :: class .
Ознакомьтесь с новыми функциями PHP5.5 .
Если вы хотите использовать эту функцию в своем методе класса, используйте static :: class :
Для более старых версий PHP вы можете использовать get_class () .
источник
static::class
иget_class_name()
?static::class
разрешается во время компиляции, аget_class_name()
интерпретируется во время выполнения. Я узнал об этом, пытаясь получить доступ к :: класса свойства динамически сгенерированный класса и получить следующее сообщение об ошибке (?):Dynamic class names are not allowed in compile-time ::class fetch
. См. Этот ответ для получения более подробной информации. Я также нашел эту заметку из документации полезной.Вы можете использовать
__CLASS__
внутри класса, чтобы получить имя.http://php.net/manual/en/language.constants.predefined.php
источник
get_class($this)
,static::class
) просто возвращают имя дочернего (расширяющего родительский) класс.self::class
также, похоже, возвращает имя родительского класса.Похоже, вы ответили на свой вопрос.
get_class
даст вам имя класса. Он носит процедурный характер и, возможно, именно поэтому вызывает путаницу. Взгляните на документацию php дляget_class
Вот их пример:
Чтобы сделать его более похожим на ваш пример, вы можете сделать что-то вроде:
Теперь вы можете:
Однако это несколько ограничено, потому что, если мой класс будет расширен, он все равно вернет MyClass.
get_called_class
Вместо этого мы можем использовать , который основан на позднем статическом связывании , относительно новой функции и требует PHP> = 5.3.источник
Теперь у меня есть ответ на мою проблему. Благодаря Брэду за ссылку, я найти ответ здесь . И спасибо J.Money за идею. Мое решение:
источник
FooBar::getClassName()
всегда'FooBar'
. Если бы вы могли печататьProduct::getClassName()
- тогда вы могли бы также печатать'Product'
.Чтобы получить имя класса, вы можете использовать ReflectionClass
источник
Похоже,
ReflectionClass
это довольно производительный вариант.Контрольный показатель:
источник
Я думаю, что важно упомянуть небольшую разницу между «self» и «static» в PHP, поскольку «лучший ответ» использует «static», что может привести некоторых людей в замешательство.
Полученные результаты:
источник
end(preg_split("#(\\\\|\\/)#", Class_Name::class))
Class_Name::class
: вернуть класс с пространством имен. Итак, после того, как вам нужно только создать массив, получите последнее значение массива.источник
для версий старше PHP 5.5
источник
источник