在研究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.php
- drivers
- Driver_name_subclass_1.php
- Driver_name_subclass_2.php
Driver_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' 信息了
}
}
?>