Codeigniter为什么只有一个只有构造函数和get的Model类?

时间:2014-03-20 15:14:23

标签: codeigniter oop

有人能告诉我为什么Codeigniter有一个几乎裸露的Model类吗?这个设计实现了什么?

1: <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 2: /**
 3:  * CodeIgniter
 4:  *
 5:  * An open source application development framework for PHP 5.1.6 or newer
 6:  *
 7:  * @package     CodeIgniter
 8:  * @author      ExpressionEngine Dev Team
 9:  * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
10:  * @license     http://codeigniter.com/user_guide/license.html
11:  * @link        http://codeigniter.com
12:  * @since       Version 1.0
13:  * @filesource
14:  */
15: 
16: // ------------------------------------------------------------------------
17: 
18: /**
19:  * CodeIgniter Model Class
20:  *
21:  * @package     CodeIgniter
22:  * @subpackage  Libraries
23:  * @category    Libraries
24:  * @author      ExpressionEngine Dev Team
25:  * @link        http://codeigniter.com/user_guide/libraries/config.html
26:  */
27: class CI_Model {
28: 
29:     /**
30:      * Constructor
31:      *
32:      * @access public
33:      */
34:     function __construct()
35:     {
36:         log_message('debug', "Model Class Initialized");
37:     }
38: 
39:     /**
40:      * __get
41:      *
42:      * Allows models to access CI's loaded classes using the same
43:      * syntax as controllers.
44:      *
45:      * @param   string
46:      * @access private
47:      */
48:     function __get($key)
49:     {
50:         $CI =& get_instance();
51:         return $CI->$key;
52:     }
53: }
54: // END Model Class
55: 
56: /* End of file Model.php */
57: /* Location: ./system/core/Model.php */

我看到了__get功能,但我不确定是否会帮助我。如何扩展这个课程有助于我的设计?

39:     /**
40:      * __get
41:      *
42:      * Allows models to access CI's loaded classes using the same
43:      * syntax as controllers.
44:      *
45:      * @param   string
46:      * @access private
47:      */
48:     function __get($key)
49:     {
50:         $CI =& get_instance();
51:         return $CI->$key;
52:     }

1 个答案:

答案 0 :(得分:4)

因此,无论何时扩展CI_Model类,您的模型都会继承__construct__get这两个函数Magic Methods

只要在模型中调用函数,就会调用__construct函数。它只是创建一条日志消息。

function __construct()
{
    log_message('debug', "Model Class Initialized");
}

然而它很有用,因为你说你在你的控制器中调用一个由于某些原因而无法工作的模型。

$this->load->model('Model_name');
$this->Model_name->function();

至少您可以检查日志以查看模型是否已加载 - 对调试很有用。

__get方法用于

  

用于从无法访问的属性中读取数据。

这也很有用,因为它允许您访问模型中的任何CI库。例如,您可以在模型中使用会话库 - $this->session->userdata('username')没有 __get中的CI_Model函数试图访问模型中的会话库会出错。但是,通过延长CI_Model,它就赢了。因此,请注意它非常有用