知识储备--记录yii核心技术,类的延迟加载(lazy loading)

来源:互联网 发布:浙江日报撤资淘宝天下 编辑:程序博客网 时间:2024/06/05 07:36

都说Yii速度快,快是快,单是为什么快呢?

因为yii用了一个技术叫做类的延迟加载,这个东西被YII玩的惟妙惟肖。

function auto_loader($class){    require('class\\'.$class.'.php');}spl_autoload_register('auto_loader');//switch($level){    case '1':        $class1 = new Class1;        break;    case '2':        $class1 = new Class2;        break;    case '3':        $class1 = new Class3;        break;    case '4':        $class1 = new Class4;        break;    case '5':        $class1 = new Class5;        break;}

能够更快的找到类所在位置,并快速加载它怎么做到呢?
这里就引出了 “类的映射表机制”

两行代码搞定

\Yii::$classMap['app\models\Order'] = 'D:\www\basic\models\Class1.php';
$class1 = new Class1;

Yii 延迟加载组件:

Yii就是个组件化的框架,里面提供着各式各样的组件,例如 session、response,request,db...

这些组件我们在使用Yii的时候经常看到。
例如在控制器里这样使用:

class testController extends Controller{     public function actionIndex(){          $session = \Yii::$app->session;     }}

都知道是这样用,但是Yii内部是怎么处理这个session组件的呢?

Yii的入口文件是 index.php。看过这个文件的都知道里面会new一个$app实例对象。

而常规的方式是$app对象应该去把所有组件都加载进来,然后后面的其他控制器里可以随便使用了。
但是这样的方式很消耗性能。有用的没用的都加载进来了。

Yii处理的方式是 “充分的利用了PHP 的get”。
PHP有个机制是对象在获取某个属性不存在的时候会去调用
get();---看到这句是不是懂了什么了?

就是这样,Yii加载组件就是利用PHP这个机制,在new $app的时候不加载任何组件

在控制器里当使用session组件是 是这样的 \Yii::$app->session 。 Yii做的事情是
检查 $app->session 是否有这个属性?肯定没有了,但是不会报错,因为PHP有个属性不存在会去get()的机制,秘密就在这里了。属性没找到就会去执行get();而自信看session组件它重写了__get().在里面拼接了get开头的方法名(这也是为什么看到很多YII定义的函数都是get开头的原因)。最后YII会判断是否存在getSession这个方法,这个方法在session组件里肯定存在了。所以就会加载这个组件了。而其他不用的组件不会加载进来。

降龙十八掌打完收工!

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 贷款买车需注意 按揭买车平台哪个好 贷款买车都签什么合同 我想买车怎么贷款 建行全款买车再贷款 买车无需跑车管所 贷款买车利率计算公式 新手贷款买车注意事项 买车贷款需要什么条件 买车哪个网站好 买车网看看车 买车全款好还是贷款好 运图要买车网 买车贷款好还是全款好 买车按揭好还是全款好 没钱买车怎么办 买车都看什么 买车如何交保险 首付三万买车 如何选车买车 哪个网站买车便宜 汽博会买车便宜吗 买车什么时候便宜 买车一般买什么保险 买车网站有哪些 买车按揭计算器 车展买车便宜吗 分期付款买车0首付 分期付款买车流程 买车在哪个网 买车的首付是多少 买车保险要注意什么 买车要多少钱 个人贷款买车 买车如何贷款 买车去车展好还是4s店 买车需要什么手续 买车哪些保险可以不上 深圳买车条件 毛豆买车靠谱吗 买车都有什么费用