阅读 BaseYii Yii的辅助类核心框架 别名相关
<?php namespace yii; //定义命名空间,昨天修改了一天。。 use yiiaseInvalidConfigException; use yiiaseInvalidParamException; use yiiaseUnknownClassException; use yiilogLogger; use yiidiContainer; //获取应用程序开始时间 defined('YII_BEGIN_TIME') or define('YII_BEGIN_TIME', microtime(true)); //框架安装目录 defined('YII2_PATH') or define('YII2_PATH', __DIR__); //应用程序是否应在调试模式,默认值为false defined('YII_DEBUG') or define('YII_DEBUG', false); //环境的配置,默认为最终的成品环境prod defined('YII_ENV') or define('YII_ENV', 'prod'); //在生产环境中是否运行的应用程序 defined('YII_ENV_PROD') or define('YII_ENV_PROD', YII_ENV === 'prod'); //在应用程序是否运行在开发环境 defined('YII_ENV_DEV') or define('YII_ENV_DEV', YII_ENV === 'dev'); //在测试环境中是否运行的应用程序 defined('YII_ENV_TEST') or define('YII_ENV_TEST', YII_ENV === 'test'); //这个常量定义错误处理是否应该启用,默认值为true defined('YII_ENABLE_ERROR_HANDLER') or define('YII_ENABLE_ERROR_HANDLER', true); //声明一个BaseYii类 class BaseYii { //定义一个静态属性$classMap,赋值你个空字符串 public static $classMap = []; //定义一个静态属性$app,为应用实例 public static $app; //定义一个静态属性$aliases,Yii 的路径别名的 Map, 默认 @yii 指向当前目录 public static $aliases = ['@yii' => __DIR__]; //定义一个静态属性$container,用于容器使用的依赖注入(DI)容器 public static $container; //版本号 public static function getVersion() { return '2.0.0'; } //将路径别名转化为实际的路径 public static function getAlias($alias, $throwException = true) { if (strncmp($alias, '@', 1)) { // 如果 $alias 不是以 '@' 开头的,就不是一个 Yii 的别名 return $alias; } // 获取 / 在 $alias 中首次出现的位置 $pos = strpos($alias, '/'); // 如果 / 不存在,$root 就是整个 $alias,否则就是 $alias 中 / 前的内容 $root = $pos === false ? $alias : substr($alias, 0, $pos); //判断$root是否存在 if (isset(static::$aliases[$root])) { //如果 $root 对应的别名是一个字符串,之直接返回 $aliases[$root] 或者 $aliases[$root] . substr($alias, $pos) if (is_string(static::$aliases[$root])) { return $pos === false ? static::$aliases[$root] : static::$aliases[$root] . substr($alias, $pos); } else { //否则,要遍历整个 $aliases[$root] 数组,找到 $name 与 $alias 相同的值,返回 $path . substr($alias, strlen($name)) // 其实是返回了 $path 拼接上 $alias 除去 $root 后,剩下的字符串 foreach (static::$aliases[$root] as $name => $path) { if (strpos($alias . '/', $name . '/') === 0) { return $path . substr($alias, strlen($name)); } } } } //如果输入的别名无效,返回false if ($throwException) { throw new InvalidParamException("Invalid path alias: $alias"); } else { return false; } } //返回根别名的一部分,一个给定的别名 //根别名是已经注册别名通过[[setAlias()]] //如果一个给定的别名匹配多个根别名,将返回最长的一个 public static function getRootAlias($alias) { $pos = strpos($alias, '/'); $root = $pos === false ? $alias : substr($alias, 0, $pos); //判断$root是否存在 if (isset(static::$aliases[$root])) { //同上 if (is_string(static::$aliases[$root])) { return $root; } else { //同上 foreach (static::$aliases[$root] as $name => $path) { if (strpos($alias . '/', $name . '/') === 0) { return $name; } } } } return false; } //-------------------------------------------------------------未完待续