codeigniter库依赖

时间:2017-10-26 15:41:54

标签: php codeigniter

我试图在代码点火器中的类之间传递对象,目前我正在失败。我究竟做错了什么。让我来看看pure.php版本

Errors.php

<?php
class Errors
{
    public function __construct(){}
    public function setError($msg){}
}

OtherClass.php

<?php
class OtherClass
{
    public function __construct(Errors $errorObject) {}
    public function someMethod() {}
}

然后在我的主控制器.. Controller.php这样

<?php
class Main
{
    public function __construct()
    {
        $this->errors = new Errors;
        $this->other  = new OtherClass($this->errors);
    }
}

通过这样做。我可以在我从错误对象中添加错误,跨越从主控制器实例化的任何对象。

现在我的代码点火器版本看起来像这样

/library/Errors.php

<?php
class Errors
{
    public function __construct(){}
    public function setError($msg){}
}

/library/OtherClass.php

<?php
class OtherClass
{
    public function __construct(Errors $errorObject) {}
    public function someMethod() {}
}

然后在我的主控制器.. Controller.php这样

<?php

    class Main extends CI_Controller
    {
        public function __construct()
        {
            $this->load->library('Errors'); 
            $this->load->library('OtherClass',$this->errors);
        }
    }

当我这样做时,我在我的OtherClass中得到一个错误,说$ errorObject不是错误的实例。为什么没有传递对象?

1 个答案:

答案 0 :(得分:0)

问题在于$this->load->library,其定义如下。

public function library($library, $params = NULL, $object_name = NULL)

$params应该是一个数组。如果不是,则$params设置为NULL。

要解决这个问题,需要一堆猴子。

class Errors未更改,但class OtherClass需要更改为...

class OtherClass
{
    public function __construct($errorObject)
    {
        var_dump($errorObject[0]);  //so we can prove it got passed
    }

    public function someMethod(){}
}

请注意从构造函数声明中删除类型提示Error。此外,我们访问参数的索引0。原因在于控制器发生了什么。

function __construct()
{
    parent::__construct();
    $this->load->library('Errors');
    $this->load->library('OtherClass', [$this->errors]);
}

我们必须将$this->error放在一个数组中,以便load->library()不会混淆它。

另一种方法是不使用“CodeIgniter Way”并使用旧的时尚“新”代替。然后控制器是......

function __construct()
{
    parent::__construct();
    $this->load->library('Errors');
    $this->other  = new OtherClass($this->errors);
}

其他班级归还......

class OtherClass
{
    public function __construct(Errors $errorObject)
    {
        var_dump($errorObject);
    }

    public function someMethod(){}
}

现在的问题是,如果不向系统添加自动加载器,最终会使用

  

致命错误:在......中找不到'OtherClass'类

LINK会转到一个页面,其中介绍了向CI添加自动加载器的各种方法。我知道这也已经回答了。但是我现在没能找到它。

相关问题