国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

php 用的框架里的Data模式是什么?
高洛峰
高洛峰 2017-04-10 14:22:34
0
1
462

Segmentfault 用的框架里的Data模式是什么?

在 http://www.infoq.com/cn/news/2012/09/... 中提到的。

高洛峰
高洛峰

擁有18年軟件開發(fā)和IT教學(xué)經(jīng)驗(yàn)。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項(xiàng)目經(jīng)理、高級(jí)軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...

reply all(1)
伊謝爾倫

在SegmentFault框架中我們把Data定義為一個(gè)數(shù)據(jù)管理對象,主要方便在模板中展現(xiàn)。它可以展現(xiàn)單個(gè)數(shù)據(jù),也可以展現(xiàn)多個(gè)數(shù)據(jù),這主要是通過繼承Iterator接口來實(shí)現(xiàn)的迭代器功能。比如我們展示下從數(shù)據(jù)庫取出數(shù)據(jù)到頁面展示的效果

在Action中我們會(huì)這樣寫

// 從model中取出數(shù)據(jù)
$questions = $this->questionModel->listQuestions();

// 將數(shù)組放入迭代器
$this->questions = new Data_Question($questions);

// 展現(xiàn)模板
$this->view->render('questions.php');

到View中我們就可以操作Data_Question對象了

<?php foreach($questions as $q): ?>
<h2><a href="<?php $q->url(); ?>"><?php $q->title(); ?></a></h2>
<p><?php $q->summary(100, '...'); ?></p>
<?php endforeach; ?>

可以看出來它的用法大大簡化直觀,你不需要echo了,因?yàn)槲覀冊?code>Data基類中幫你用__call函數(shù)實(shí)現(xiàn)了通過字段名作為方法名直接輸出的工作,當(dāng)然你也可以echo $q->title,因?yàn)槲覀円矊?code>__get函數(shù)做了處理,你可以直接調(diào)用當(dāng)前的字段。

更重要的是配合緩存技術(shù)的使用,我們可以達(dá)到非常夢幻的方法,比如問題作者$q->user,它可以直接返回一個(gè)Data_User的對象,那么我們就可以做到使用的時(shí)候再查詢,想用什么數(shù)據(jù)就寫什么數(shù)據(jù),比如我們輸出每個(gè)問題的作者相關(guān)信息

<a href="<?php $q->user->url(); ?>"><?php $q->user->name(); ?> . <?php $q->user->rank(); ?></a>

這只是些最基本的用法,還有更多復(fù)雜的用法就不一一介紹了,比如輸出字段的時(shí)候可以帶參數(shù)等等

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template