我有一个现有的控制器(classA)需要使用一个新的帮助器类(classB)。通常我会将classB放入库中并执行
$this->load->library('classb');
$this->classb->method();
但是,我遇到了一个问题,我在我的classB中定义构造函数所需的const
classB {
const MYDEFINE = 1;
...
}
这种方法的问题是MYDEFINE的定义在我加载库之前是不可用的,但是我需要使用发送classB构造函数的参数创建$ params数组。所以我得到一个鸡与蛋的案例
$params = array();
$params['open_mode'] = classB::MYDEFINE;
$instance = $this->load->library('classB', $params);
我已经能够通过不使用库来解决这个问题 - 而是在我的classA控制器中使用@include_once('classB')工作正常。因此,文件classB.php存储在controllers目录中。
我想知道其他人是否遇到过这个问题以及他们如何解决这个问题(除了通过去除其他地方的问题)。我查看了PhilSurgeon(http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY)关于另一种方法的帖子,但它不适合这个问题(至少我不这么认为)。
答案 0 :(得分:0)
我不清楚为什么要声明一个常量,然后在初始化类时将其加载到配置中......这没有任何意义,这就是为什么你有鸡与蛋的问题
我会把事情大致如下:
private $myvar = 'My Constant Value';
function __construct() ... etc
然后您可以使用以下方式访问它:
$this->myvar
您的库类中的任何位置,包括构造,如果您想通过配置更改它
编辑:你仍然可以使用一个更合适的常量,但是然后将它传递给你的construct()中的$ this-> myvar,如上所述。关键是,你的Constant永远不应该在课堂外使用
答案 1 :(得分:0)
如何创建引导库 像
include 'path/to/class/b';
class Init_class_b Extends class_b
{
function __construct($params)
{
// handle the variables here
parent::__construct();
}
}
然后:
$this->load->library('Init_class_b',$params_for_construct);
$this->Init_class_b->method()