本文概述
在CodeIgniter 2.0及更高版本中引入了驱动程序。
什么是驱动程序
这些是具有父类和许多子类的特殊类型的库。这些子类有权访问父类, 但不能访问其父级。它使你可以在控制器内创建更优雅的类和更优雅的语法。
驱动程序位于CodeIgniter文件夹的system / libraries文件夹中。
初始化驱动程序
要初始化驱动程序, 请编写以下语法。
$this->load->driver('class_name');
在这里, class_name是你要调用的驱动程序名称。
例如, 要调用驱动程序类main_class, 请执行以下操作。
$this->load->driver('main_class');
要调用其方法,
$this->main_class->a_method();
然后可以直接通过父类调用子类, 而无需初始化它们。
$this->main_class->first_child->a_method();
$this->main_class->second_child->a_method();
创建自己的驱动程序
在CodeIgniter中创建驱动程序需要三个步骤。
- 制作文件结构
- 制作驱动程序清单
- 制作驱动程序
制作文件结构
转到CodeIgniter的system / libraries文件夹, 然后新建一个My_driver文件夹。在此文件夹中创建一个文件My_driver.php。
现在在My_driver文件夹中新建一个文件夹, 将其命名为driver。在这个新文件夹中, 创建一个文件My_driver_first_driver.php。
将显示以下文件结构。
/libraries
/My_driver
My_driver.php
/drivers
My_driver _first_driver.php
在CodeIgniter中, 驱动程序库结构是这样的:子类不扩展, 因此它们不继承主驱动程序的属性或方法(在本例中为My_driver)。
- My_driver-这是一个类。
- My_driver.php-父驱动程序
- My_driver_first_driver.php-子驱动程序
制作驱动程序清单
在system / libraries / My_driver文件夹中的My_driver.php文件中, 编写以下代码,
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class CI_My_driver extends CI_Driver_Library
{
function __construct()
{
$this->valid_drivers = array('first_driver');
}
function index()
{
echo "<h1>This is Parent Driver</h1>";
}
}
在system / libraries / My_driver / drivers中的My_driver_first_driver.php文件中, 编写以下代码,
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class My_driver_first_driver extends CI_Driver
{
function first()
{
echo "<h1>This is first Child Driver</h1>";
}
}
?>
使用以下代码在应用程序/控制器中创建控制器文件Mydrive.php,
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Mydrive extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->driver('my_driver');
}
public function invoke1()
{
$this->my_driver->index();
}
public function invoke2()
{
$this->my_driver->first_driver->first();
}
}?>
在浏览器上, 运行URL http://localhost/driver/index.php/mydrive/invoke1
看上面的快照, 父驱动程序类通过函数invoke1调用。
现在运行URL http://localhost/driver/index.php/mydrive/invoke2
看一下上面的快照, 使用函数invoke2调用了子驱动程序类。