Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对其他类使用codeigniter库的替代方法_Codeigniter - Fatal编程技术网

对其他类使用codeigniter库的替代方法

对其他类使用codeigniter库的替代方法,codeigniter,Codeigniter,我有一个现有的控制器(classA),它需要使用一个新的助手类(classB)。通常我会将classB放入一个库中 $this->load->library('classb'); $this->classb->method(); 然而,我遇到了一个问题,我在classB中定义构造函数所需的常量 classB { const MYDEFINE = 1; ... } 这种方法的问题是MYDEFINE的定义在我加载库之前是不可用的,但是我需要创建带有参数的$

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

$this->load->library('classb');
$this->classb->method();
然而,我遇到了一个问题,我在classB中定义构造函数所需的常量

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存储在controllers目录中


我想知道其他人是否遇到过这个问题,以及他们可能如何解决这个问题(除了从其他地方去除常数)。我看了Phil外科医生()关于另一种方法的帖子,但它不太适合这个问题(至少我不这么认为)

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

我将大致设置如下:

private $myvar = 'My Constant Value';

function __construct() ... etc
然后,您可以使用以下方式访问它:

$this->myvar
库类中的任何位置,包括构造(如果要通过配置更改它)


编辑:您仍然可以使用一个更合适的常量is,但随后将其传递给构造()中的$this->myvar,如上所述。关键是,您的常量不应该在类之外使用

创建一个引导库怎么样 像

然后:

$this->load->library('Init_class_b',$params_表示_构造)


$this->Init\u class\u b->method()

常量在类中声明为public,以便调用方使用类定义的引用。唯一的其他方法是声明与类无关的常量(例如DEFINE)。我喜欢尽可能完整地/封装课堂。在您的示例中,$myvar对于类是私有的,并且不能被类的实例化器用作参数。是的,但这没有任何意义-如果可以将其用作默认值,为什么要从类外部实例化呢。您可以随时将其公开,但这只会让您产生一种可怕的代码气味
include 'path/to/class/b';

class Init_class_b Extends class_b
{
   function __construct($params)
   {
      // handle the variables here
      parent::__construct();
   }
}