0

我有一个现有的控制器(classA),它需要使用一个新的辅助类(classB)。通常我会将 classB 放入库中并执行

$this->load->library('classb');
$this->classb->method();

但是,我遇到了一个问题,我在 classB 中定义构造函数所需的 const

classB {
    const MYDEFINE = 1;
    ...
}

这种方法的问题是 MYDEFINE 的定义在我加载库之前不可用,但我需要创建带有参数的 $params 数组以发送 classB 构造函数。所以我得到了一个鸡与蛋的案例

$params = array();
$params['open_mode'] = classB::MYDEFINE;
$instance = $this->load->library('classB', $params);

我已经能够通过不使用库来解决这个问题 - 而是在我的 classA 控制器中使用 @include_once('classB') ,它工作正常。因此文件 classB.php 存储在控制器目录中。

我想知道其他人是否遇到过这个问题以及他们如何解决这个问题(除了在其他地方去除 const 之外)。我查看了 PhilSurgeon ( http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY ) 的一篇关于替代方法的帖子,但它不太适合这个问题(至少我不这么认为)。

4

2 回答 2

0

我不清楚你为什么要声明一个常量,然后在初始化类时将其加载到配置中......这没有任何意义,这就是为什么你有鸡和蛋的问题

我会将事情大致设置为:

private $myvar = 'My Constant Value';

function __construct() ... etc

然后您可以使用以下方式访问它:

$this->myvar

库类中的任何位置,如果您想通过配置更改它,包括构造

编辑:您仍然可以使用更合适的常量,但然后将其传递给您的construct() 中的 $this->myvar ,如上所述。关键是,你的常量永远不应该在课堂之外使用

于 2013-10-17T22:35:27.783 回答
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()

于 2013-10-18T01:32:28.363 回答