主題: 关于LifeType的数据对象的改良,提了一个方法,以Article类为例 作者: asers 於 二月 23, 2008, 04:11:57 上午 空闲编写,代码不可运行,只表明了想法,大家看看是否可行,因为并没有深入了解LifeType的一些东西,所以我无法真实的估计这种方法的可行性:
<?php /** * LifeType 中 Article 对象的构造建议,没有深入地了解 LifeType 的代码 * 只是提出一个方案建议,大家可讨论。 * * 时间不多,代码并没有写完整,只是表达了自己的想法,有兴趣的可尝试改 * 造,来验证它的可行性。 * * Author : Zhang Shiwei (asers_z@hotmail.com) * 2008-2-23 */ class Article { /** * 用来存储文章列表的数组,无论一篇或多篇 * * @private Array */ private $_articles = array(); /** * 存储此次循环时获得的文章资料 * * @private Array && Default FALSE */ private $_article = false; /** * 存储此次循环中获得的数组索引 * * @private Int */ private $_subScript = false; /** * 构造函数 * * @public */ public function __construct( $topic, $text, $categories, $user, $blog, $status, $numReads, $properties = Array(), $slug = "", $id = -1 ) { // LifeType 的具体实现 } /** * 将获得的文章压入数组,执行LifeType中类似 getBlogArticles 方法时,循环压入 * * @param : result 获得单条数据库记录数组 * @return : true */ public function pushArticle( $result ) { // 如果 _article 成员为 false,意为该对象压入第一条记录,则记录在这个成员上 // 并将压入数组 // // 记录第一条的原因是系统并不知道此时压入的是文章列表或单条文章,记录在这里 // 后可以确保如果是单条文章,下面的各个方法仍然可以正常取值 // // 当然也可以通过构造函数来确认此时压入的是单篇文章而不是列表 if($this->_article === false) { $this->_article = $result; $this->_articles[] = $this->_article; } else $this->_articles[] = $result; } /** * 在其他位置需要对列表进行读取时使用 while 句柄循环该方法 * * @public */ public function listArticles() { return list($this->_subScript, $this->_article) = each($this->_articles); } /** * 获得文章的标题 * * @public */ public function getTopic() { return $this->_article["topic"]; } /** * 获得文章的介绍内容 * * @public */ public function getIntroText() { return $this->_article["introtext"]; } // ...... 更多的相关方法的实现不再一一列表 } /** * 下面是一段简单的示例代码,当调用了 getBlogArticles 时将结果集 * 压入数组 * * 并在接下来的示例代码中循环显示这些内容 */ class Articles extends Model { // ........... // function getBlogArticles( $blogId, $date = -1, $amount = -1, $categoryId = 0, $status = POST_STATUS_PUBLISHED, $userId = 0, $maxDate = 0, $searchTerms = "", $page = -1 ) { // ............ // $article = new Article( ... ); while( $row = $result->FetchRow()) { // Push article $article->pushArticle( $row ); // and cache it for later use, we might need it $this->_cache->setData( $article->getId(), CACHE_ARTICLES, $article ); $this->_cache->setMultipleData( $article->getPostSlug(), CACHE_ARTICLES_BYNAME, $article ); } $result->Close(); return $article; } // ................ // } $article = new Article( ... ); while( $article->listArticles() ) { // ......... // // .... } |