public static function using($namespace, $checkClassExistence = true)
{
$namespace = static::prado3NamespaceToPhpNamespace($namespace);
if (isset(self::$_usings[$namespace]) || class_exists($namespace, false)) {
return;
}
if (array_key_exists($namespace, self::$classMap)) {
// fast autoload a Prado3 class name
$phpNamespace = self::$classMap[$namespace];
if (class_exists($phpNamespace, true) || interface_exists($phpNamespace, true)) {
if (!class_exists($namespace) && !interface_exists($namespace)) {
class_alias($phpNamespace, $namespace, true);
}
return;
}
} elseif (($pos = strrpos($namespace, '\\')) === false) {
// trying to autoload an old class name
foreach (self::$_usings as $k => $v) {
$path = $v . DIRECTORY_SEPARATOR . $namespace . self::CLASS_FILE_EXT;
if (file_exists($path)) {
$phpNamespace = '\\' . $k . '\\' . $namespace;
if (class_exists($phpNamespace, true) || interface_exists($phpNamespace, true)) {
if (!class_exists($namespace) && !interface_exists($namespace)) {
class_alias($phpNamespace, $namespace, true);
}
return;
}
}
}
if ($checkClassExistence && !class_exists($namespace, false) && !interface_exists($namespace, false)) {
throw new TInvalidOperationException('prado_component_unknown', $namespace, '');
}
} elseif (($path = self::getPathOfNamespace($namespace, self::CLASS_FILE_EXT)) !== null) {
$className = substr($namespace, $pos + 1);
if ($className === '*') {
self::$_usings[substr($namespace, 0, $pos)] = $path;
} else {
//self::$_usings[$namespace]=$path;
if (!$checkClassExistence || !class_exists($className, false) && !interface_exists($className, false)) {
try {
include_once $path;
if (class_exists($namespace, false) || interface_exists($namespace, false)) {
class_alias($namespace, $className, true);
}
} catch (\Exception $e) {
if ($checkClassExistence && !class_exists($className, false)) {
throw new TInvalidOperationException('prado_component_unknown', $className, $e->getMessage());
} else {
throw $e;
}
}
}
}
}
}