用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3078|回复: 3
收起左侧

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

[复制链接]
发表于 2013-3-31 23:31:48 | 显示全部楼层 |阅读模式
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的自动加载配置文件


二、第二个迷惑的地方:

PHP复制代码
 
 
 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里面的方法

PHP复制代码
  $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[1];

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



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


发表于 2013-4-1 01:04:31 CI中国手机版 | 显示全部楼层
刚在群里看到了你们讨论了,哈哈来自: iPhone客户端
发表于 2013-4-1 11:30:46 | 显示全部楼层
有用!
发表于 2013-7-1 17:48:16 | 显示全部楼层

本版积分规则