0xz 发表于 2013-3-31 23:31:48

home控制器里面代码片段小记

home.php控制器里面代码片段小记,php新手,记录一下希望对跟我一样的新手有所帮助

一、index函数时面发现一些“直接引用没有声明的对象方法”比如:$this->_posts = $this->posts_mdl->get_posts('post', 'publish', NULL, $this->_limit, $this->_offset)->result();

中的$this->posts_mdl->get_posts,home.php与父类ST_Controller都找不到声明,其实它是在application/config/autoload.php
设置了自动加载,看代码“$autoload['model'] = array('posts_mdl','metas_mdl','comments_mdl');”,所以们就可以直接这样$this->posts_mdl->get_posts使用了,其它的类似,如果找不到某些对象的出处,可以去看一下CI的自动加载配置文件


二、第二个迷惑的地方:



private function _prepare_posts()
{
foreach($this->_posts as &$post)
{
   /** 日志固定链接 */
   $post->permalink = site_url('posts/'. $post->slug);
   
   /** 日志发表日期 */
   $post->published = setting_item('post_date_format')
         ? date(setting_item('post_date_format'), $post->created)
         : date('Y-m-d', $post->created);
   
   $this->metas_mdl->get_metas($post->pid);
   
   /** 日志分类 */
   $post->categories = $this->metas_mdl->metas['category'];
   
   /** 日志标签 */
   $post->tags = $this->metas_mdl->metas['tag'];
   
   /** 日志摘要 */
   $post->excerpt = Common::get_excerpt($post->text);
   
   /** 是否存在摘要 */
   $post->more = (Common::has_break($post->text)) ? TRUE : FALSE;
   
   unset($post->slug);
   unset($post->text);
}
}


      这一段代码,刚开始看的时候,也迷糊,因为看到“->”所以下意义地去找$post这个类对象是在那里声明的,但却找不到,父类自动加载的什么的也找了个遍,后来上群问了一下,给我一支烟(719578068) 大哥说就是字面意思了,比如
foreach($arr as &$ksjsj)
,还是有点迷,后来退回来看index里面的方法

$this->_posts = $this->posts_mdl->get_posts_by_meta($slug, 'category', 'post', 'publish', 'posts.*', $this->_limit, $this->_offset)->result();
关键就在这里
result()反回的是一个对象object数组,而不是一般平常用=>取值的数组,所以我们就看以了上面那个‘->’号,一切误导就了在了这里了,,,

上面第一段代码的功能,就是二次对$_posts 数组里面的成员进行加工,


简单的例子


$arr=array(1,2,3);
foreach($arr as &$post)
{
$post=$post*$post;
}

echo$arr;

//这个时候,会输出4,php的引用跟其它语言的有点不一样
?>



第一次发贴,希望对新手有用


codeigniter_lht 发表于 2013-4-1 01:04:31

刚在群里看到了你们讨论了,哈哈

smallhe 发表于 2013-4-1 11:30:46

有用!

viqecel 发表于 2013-7-1 17:48:16

好{:1_1:}{:1_1:}{:1_1:}
页: [1]
查看完整版本: home控制器里面代码片段小记