替代将codeigniter库用于其他类

时间:2013-10-17 22:20:38

标签: codeigniter

我有一个现有的控制器(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)关于另一种方法的帖子,但它不适合这个问题(至少我不这么认为)。

2 个答案:

答案 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()