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

[模型] 菜鸟初学CI,看中文手册教程,有一处不明白,求教~~

[复制链接]
发表于 2017-5-22 03:34:58 | 显示全部楼层 |阅读模式
菜鸟一枚,正在学习3.1.4版本的CI,正在研究其中的那个“新闻系统”,其中定义的那个class News_model的构造函数,看不明白是什么意思
CI_3.1.4 中文手册-新闻系统


PHP复制代码
 
<?php
class News_model extends CI_Model {
        public function __construct()
        {
                $this->load->database();      //     这个类里面, 哪个地方定义了“load”啊? 怎么能这样引用呢?
               
        }
        public function get_news($slug = FALSE)  
        {
                if ($slug === FALSE)
                {
                        $query = $this->db->get('news');
                        return $query->result_array();
                }
                $query = $this->db->get_where('news', array('slug' => $slug));
                return $query->row_array();
        }
 
 
 
 
复制代码





发表于 2017-5-22 10:14:38 | 显示全部楼层
这是框架帮你定义的 load,如果什么都要你去做,那还是框架吗?具体参考 http://codeigniter.org.cn/user_guide/libraries/loader.html 这是关于 load 的使用说明。
另外,中文手册只是告诉你如何使用 CI,而如果你想了解 CI 的内部细节,你需要看源码,或者看一些源码解析的文章,并且论坛里也有一本书详细讲解了内部细节。
 楼主| 发表于 2017-5-22 10:56:21 | 显示全部楼层
Hex 发表于 2017-5-22 10:14
这是框架帮你定义的 load,如果什么都要你去做,那还是框架吗?具体参考 http://codeigniter.org.cn/user_g ...

哪本书呢,求种子,不对,求链接~~
 楼主| 发表于 2017-5-22 11:01:12 | 显示全部楼层
Hex 发表于 2017-5-22 10:14
这是框架帮你定义的 load,如果什么都要你去做,那还是框架吗?具体参考 http://codeigniter.org.cn/user_g ...

就算是划框架帮定义的load,在使用时也应该遵循PHP的规则啊~~
在类里没有定义过的,怎么能通过$this->来引用呢?
想不通。。。。一定是使用到了php里我不了解决的高级的规则
发表于 2017-5-22 11:03:39 | 显示全部楼层
昀羲 发表于 2017-5-22 11:01
就算是划框架帮定义的load,在使用时也应该遵循PHP的规则啊~~
在类里没有定义过的,怎么能通过$this->来引 ...

简单说就是在执行你输入的代码以前,框架做了很多很多的工作,其中就有引入 loader.php 这个类,具体都做了什么你可以看一下源码,从 core 目录下的 CodeIgniter.php 开始看。

很多时候,你看到的只是表面现象,一个框架或者一个类库,背后都是做了很多你看不到的工作,这样才能简化你的开发,否则这些事情都是要你自己一个字母一个字母实现的。

发表于 2017-5-22 11:04:04 | 显示全部楼层
发表于 2017-5-22 11:17:23 | 显示全部楼层
News_model 继承了CI_Model中的魔术方法__get(),当访问不存在的属性时 会自动调用该方法
        /**
         * __get magic
         *
         * Allows models to access CI's loaded classes using the same
         * syntax as controllers.
         *
         * @param        string        $key
         */
        public function __get($key)
        {
                // Debugging note:
                //        If you're here because you're getting an error message
                //        saying 'Undefined Property: system/core/Model.php', it's
                //        most likely a typo in your model code.
                return get_instance()->$key;
        }

所以这里的load 其实是相当于 调用了  get_instance()->load

本版积分规则