• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/component.php
  • Класс: CBitrixComponent
  • Вызов: CBitrixComponent::__getClassForPath
private function __getClassForPath($componentPath)
{
	if (!isset(self::$__classes_map[$componentPath]))
	{
		$fname = $_SERVER["DOCUMENT_ROOT"].$componentPath."/class.php";
		if (file_exists($fname) && is_file($fname))
		{
			$beforeClasses = get_declared_classes();
			$beforeClassesCount = count($beforeClasses);
			include_once($fname);
			$afterClasses = get_declared_classes();
			$afterClassesCount = count($afterClasses);

			for ($i = $beforeClassesCount; $i < $afterClassesCount; $i++)
			{
				if (!isset(self::$classes[$afterClasses[$i]]) && is_subclass_of($afterClasses[$i], "cbitrixcomponent"))
				{
					if (!isset(self::$__classes_map[$componentPath]) || is_subclass_of($afterClasses[$i], self::$__classes_map[$componentPath]))
					{
						self::$__classes_map[$componentPath] = $afterClasses[$i];

						//recursion control
						self::$classes[$afterClasses[$i]] = true;
					}
				}
			}
		}
		else
		{
			//no need to try for several times
			self::$__classes_map[$componentPath] = "";
		}
	}
	return self::$__classes_map[$componentPath] ?? null;
}