|
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的引用跟其它语言的有点不一样
?>
第一次发贴,希望对新手有用
|
|