@www=>xxx ['@www']=xxx
@www=>yyy ['@www']=yyy
@www/a=>yyya ['@www']=['@www/a'=>yyya,'@www'=>yyy]
@www/b=yyyb ['@www']=['@www/a'=>yyya,'@www'=>yyy,'@www/b'=>yyyb]
也就是说,会把所有的相同根别名的数据,放到一个以根别名为键的数组中,而且对键进行逆向排序
获取别名函数源码:getAlias
public static function getAlias($alias, $throwException = true) { //如果不是为@开头,直接返回alias if (strncmp($alias, '@', 1)) { // not an alias return $alias; } //获取根别名,和setAlias相同 $pos = strpos($alias, 'https://www.jb51.net/'); $root = $pos === false ? $alias : substr($alias, 0, $pos); if (isset(static::$aliases[$root])) { //如果根别名的值为字符串,即只设置了一个根别名(['@www'=>xxx]) if (is_string(static::$aliases[$root])) { /* * 如果获取的名称为根别名,直接返回根别名对应的路径, * 否则返回值为根别名路径+去掉别名之后的路径 * * 如: * @www,直接返回 xxx * @www/aaa/bbb 返回xxx/aaa/bbb */ return $pos === false ? static::$aliases[$root] : static::$aliases[$root] . substr($alias, $pos); } else { /* 遍历子别名 * * @www=>xxx ['@www']=xxx * @www=>yyy ['@www']=yyy * @www/a=>yyya ['@www']=['@www/a'=>yyya,'@www'=>yyy] * @www/b=>yyyb ['@www']=['@www/a'=>yyya,'@www/b'=>yyyb,'@www'=>yyy] * @www/a/c=>yyyac ['@www']=['@www/a/c'=>yyyac,'@www/a'=>yyya,'@www/b'=>yyyb,'@www'=>yyy] */ foreach (static::$aliases[$root] as $name => $path) { /* * 在这里,因为根别名的所有子别名都根据键也就是子别名进行了逆向排序 * 所以在查找的时候总是先匹配最长的别名。 * * 又因为在比较的时候给别名后面加了"https://www.jb51.net/",所以可以保证在查找的时候能以"https://www.jb51.net/"作为分隔符。 */ if (strpos($alias . 'https://www.jb51.net/', $name . 'https://www.jb51.net/') === 0) { return $path . substr($alias, strlen($name)); } } } } if ($throwException) { throw new InvalidParamException("Invalid path alias: $alias"); } else { return false; } }
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》