有人能告诉我为什么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: }
答案 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
,它就赢了。因此,请注意它非常有用