Как узнать имя класса
Перейти к содержимому

Как узнать имя класса

  • автор:

js получить название класса

Чтобы получить название класса в JavaScript, нужно использовать свойство className элемента или метод classList для доступа к списку классов элемента.

  1. Используя свойство className :
 class="my-class">
const element = document.querySelector('.my-class'); const className = element.className; console.log(className); // выведет "my-class" 
  1. Используя метод classList :
 class="my-class">
const element = document.querySelector('.my-class'); const classList = element.classList; console.log(classList); // выведет объект DOMTokenList console.log(classList[0]); // выведет первый класс элемента, т.е. "my-class" 

Важно учитывать, что если элемент имеет несколько классов, то возвращаемое свойством className значение будет строкой, содержащей все классы через пробел. Если же нужно работать с каждым классом отдельно, то лучше использовать метод classList , который возвращает объект DOMTokenList , содержащий все классы элемента в виде отдельных строк.

  1. Получение списка всех классов элемента:
 class="foo bar">
const element = document.querySelector('div'); const classList = element.classList; console.log(classList); // выведет DOMTokenList ["foo", "bar"] 
  1. Получение первого класса элемента:
 class="foo bar">
const element = document.querySelector('div'); const firstClass = element.classList[0]; console.log(firstClass); // выведет "foo" 

get_called_class

Возвращает имя класса, из которого был вызван статический метод.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает имя класса.

Ошибки

Если функция get_called_class() вызывается не из класса, то выдаётся ошибка Error . До версии PHP 8.0.0 выдавалась ошибка уровня E_WARNING .

Список изменений

Версия Описание
8.0.0 Вызов функции не из класса теперь приводит к ошибке Error . Ранее выдавалась ошибка уровня E_WARNING и функция возвращала значение false .

Примеры

Пример #1 Пример использования get_called_class()

class foo static public function test () var_dump ( get_called_class ());
>
>

class bar extends foo >

foo :: test ();
bar :: test ();

Результат выполнения приведённого примера:

string(3) "foo" string(3) "bar"

Смотрите также

User Contributed Notes 9 notes

9 years ago

As of PHP 5.5 you can also use «static::class» to get the name of the called class.

class Bar public static function test () var_dump (static::class);
>
>

class Foo extends Bar

string(3) «Foo»
string(3) «Bar»

10 years ago

get_called_class() in closure-scopes:

ABSTRACT CLASS Base
protected static $stub = [ ‘baz’ ];

//final public function boot()
static public function boot ()
print __METHOD__ . ‘-> ‘ . get_called_class (). PHP_EOL ;

array_walk (static:: $stub , function()
print __METHOD__ . ‘-> ‘ . get_called_class (). PHP_EOL ;
>);
>

public function __construct ()
self :: boot ();
print __METHOD__ . ‘-> ‘ . get_called_class (). PHP_EOL ;

array_walk (static:: $stub , function()
print __METHOD__ . ‘-> ‘ . get_called_class (). PHP_EOL ;
>);
>
>

CLASS Sub EXTENDS Base
>

// static boot
Base :: boot (); print PHP_EOL ;
// Base::boot -> Base
// Base:: -> Base

Sub :: boot (); print PHP_EOL ;
// Base::boot -> Sub
// Base:: -> Base

new sub ;
// Base::boot -> Sub
// Base:: -> Base
// Base->__construct -> Sub
// Base-> -> Sub

// instance boot
new sub ;
// Base->boot -> Sub
// Base-> -> Sub
// Base->__construct -> Sub
// Base-> -> Sub
?>

12 years ago

I think it is worth mentioning on this page, that many uses of the value returned by get_called_function() could be handled with the new use of the old keyword static, as in
static:: $foo ;
?>

versus
$that = get_called_class ();
$that :: $foo ;
?>

I had been using $that:: as my conventional replacement for self:: until my googling landed me the url above. I have replaced all uses of $that with static with success both as
static:: $foo ; //and.
new static();
?>

Since static:: is listed with the limitation: «Another difference is that static:: can only refer to static properties.» one may still need to use a $that:: to call static functions; though I have not yet needed this semantic.

3 years ago

namespace root;
class Factor protected static $instance = null;

private function __construct()

public static function getInstance() if (!self::$instance) $name = get_called_class();
self::$instance = new $name();
>

class Single extends Factor public function abc() return ‘abc’;
>
>

class Index public function get() return Single::getInstance();
>
>

$index = new Index();
var_dump($index->get());

Узнать имя класса во время исполнения программы

У меня есть функция (используется для записи логов), которая вызывается в разных классах. Не хочется каждый раз переписывать код в ней для каждого нового класса(они будут и добавляться и убираться со временем, ну или вообще функция будет использоваться в дальнейшем в других проектах). Мне хотелось бы узнавать имя класса, из которого она вызывается (для задания имени файлу и прочих плюшек) не передавая лишних параметров в функцию. Это можно реализовать? Можно и boost`ом.

Отслеживать
задан 22 апр 2016 в 10:51
761 1 1 золотой знак 7 7 серебряных знаков 19 19 бронзовых знаков
это похоже на то, что Вы хотите stackoverflow.com/questions/1666802/is-there-a-class-macro-in-c
22 апр 2016 в 11:12
Если вам дан исчерпывающий ответ, отметьте его как верный (галка напротив выбранного ответа).
23 апр 2016 в 13:16

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Функция typeid(object) возвращает объект типа type_info с информацией о типе объекта, для которого она вызывается (собственно, о классе). У этого объекта( type_info ) есть метод name() , который и возвращает имя класса. Для использования нужно подключить .

Так что в итоге для получения имени класса нужно использовать

Или, если функция не является методом класса, передать в typeid сам объект или разыменованный указатель.

Отслеживать
ответ дан 22 апр 2016 в 13:53
36 1 1 бронзовый знак

Никто не гарантирует, что name() вернёт «человеческое» имя. Как показывает практика, в некоторых компиляторах, эти имена ничего не могут сказать человеку.

23 апр 2016 в 9:26

Собственные средства c++ не позволяют ничего узнать о контектсте вызова функции.

Стек вызова можно проанализировать с помощью некоторых внешних библиотек / API операционной системы. Например: http://man7.org/linux/man-pages/man3/backtrace.3.html https://msdn.microsoft.com/en-us/library/ms680650%28VS.85%29.aspx . Но для применение этих средств может налагать дополнительные ограничения на собираемый код (сборка с отладочной информацией и т.д.).

Более разумно, ИМХО, передавать контекст вызова явно: это позволит использовать «штатные» средства c++: __FILE__ , __LINE__ , __func__ , . Извлечение контекста можно замаскировать макросом:

 struct Context< const char* file; unsigned line; const char* function; >; // Work around MSVS #ifndef __func__ #define __func__ __FUNCTION__ #endif #define CONTEXT() Context(< __FILE__, __LINE__, __func__>) void foo( int a, int b, Context c ); #define FOO(a, b) foo( a, b, CONTEXT() ) 

Имя класса можно извлечь либо разобрав имя __FUNCTION__ , либо из указателя this :

 typeid(this).name() 

Но не хочется включать этот обращение к this в макрос, поскольку функции может быть вызвана из контекста, статической функции.

С другой стороны для целей разделения логов может быть достаточно __FILE__ .

Как можно программно узнать имя класса, представителем которого является объект?

Как можно получить и вывести на экран список всех методов класса, представителем которого является объект?

Имеется объект ($obj) какого-то класса. Требуется получить и вывести на экран имя класса, экземпляром которого является этот объект.

Имеется объект ($obj) какого-то класса. Требуется получить список всех методов класса, которому принадлежит объект.

Имеется объект ($obj) какого-то класса. Требуется получить список всех свойств класса, которому принадлежит объект.

Как можно узнать метод, который был использован при отправке запроса?
Как можно узнать виртуальный путь до выполняющегося в данный момент скрипта?

Функция domxml_open_file в качестве результата возвращает объект класса DOMDocument . Что передается этой функции в качестве параметра?

Функция domxml_open_mem в качестве результата возвращает объект класса DOMDocument . Что передается этой функции в качестве параметра?

Создать класс описаний экспонатов виртуального музея, задать начальные значения свойств класса, описать метод для отображения объектов класса. Создать экземпляр класса, получить значения его свойств и вызвать метод.

Создать класс описаний экспонатов виртуального музея, задать начальные значения свойств класса и описать метод для отображения объектов класса.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *