在研究CI框架中的驱动器类时,官方给的文档解释是:
驱动器是一种特殊类型的类库,它有一个父类和任意多个子类。子类可以访问父类, 但不能访问兄弟类。在你的 控制器 中,驱动器为你的类库提供了 一种优雅的语法,从而不用将它们拆成很多离散的类。
驱动器位于 system/libraries/ 目录,每个驱动器都有一个独立的目录,目录名和 驱动器父类的类名一致,在该目录下还有一个子目录,命名为 drivers,用于存放 所有子类的文件。
要使用一个驱动器,你可以在控制器中使用下面的方法来进行初始化:
$this->load->driver('class_name');class_name 是你想要调用的驱动器类名,例如,你要加载名为 Some_parent 的驱动器, 可以这样:
$this->load->driver('some_parent');然后就可以像下面这样调用该类的方法:
$this->some_parent->some_method();而对于那些子类,我们不用初始化,可以直接通过父类调用了:
$this->some_parent->child_one->some_method(); $this->some_parent->child_two->another_method();让人看得一头雾水,不知道如何调用。下面是在网上找的一些资料,以及体验后得到的一些学习现在记录下来......
创建自己的驱动器,首先在application/libraries/ 文件夹下创建一个驱动器文件,类似官方给的:
/application/libraries/Driver_name
Driver_name.phpdrivers Driver_name_subclass_1.phpDriver_name_subclass_2.phpDriver_name.php 代表主驱动器文件,在同级的drivers文件夹下所有的文件为次驱动器文件。
通过主驱动器文件来访问次驱动器文件中的信息
<?php //建立主驱动器 defined('BASEPATH') OR exit('No direct script access allowed'); class Driver_name extends CI_Driver_Library //主驱动器必须继承CI_Driver_Library { public $valid_drivers; //这个素性值也是必须的 public function __construct() { //链接次驱动器,数组形式 //在这里链接次驱动器时,前面主驱动器Driver_name千万不要带 $this->valid_drivers = array('subclass_1','subclass_2'); } public function get_friends() { return $this->subclass_1->get_friends().$this->subclass_2->get_friends(); } }?>
<?php //创建次驱动器类 defined('BASEPATH') OR exit('No direct script access allowed'); class Driver_name_subclass_1 extends CI_Driver //次驱动器必须继承CI_Driver { public function get_friends(){ return 'Driver_name_subclass_1 '; } }
?>
<?php //创建次驱动器类 defined('BASEPATH') OR exit('No direct script access allowed'); class Driver_name_subclass_2 extends CI_Driver //次驱动器必须继承CI_Driver { public function get_friends(){ return ' Driver_name_subclass_2 '; } }
?>
//创建控制器来访问驱动器类
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Test extends CI_Controller { public function __construct() { parent::__construct(); //加载驱动器 $this->load->driver('driver_name'); } //驱动测试 public function friends(){ echo $this->driver_name->get_friends(); //这里输出就时次驱动器中的:'Driver_name_subclass_1 Driver_name_subclass_2' 信息了 } }?>
