我试图在代码点火器中的类之间传递对象,目前我正在失败。我究竟做错了什么。让我来看看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不是错误的实例。为什么没有传递对象?
答案 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添加自动加载器的各种方法。我知道这也已经回答了。但是我现在没能找到它。