我有一个模型,里面定义了一个不相关的类。
我是原型设计,并没有花时间正确创建它。
既然我的最终用户接受了原型,我正在重新访问,我想正确地重新编写我的代码。该课程看起来像这样:
<?php
class myclassABC
{
private $_hostname;
private $_password;
private $_username;
private $_connection;
private $_data;
private $_timeout;
private $_prompt;
public function __construct($hostname, $password, $username = "", $timeout = 10)
{
$this->_hostname = $hostname;
$this->_password = $password;
$this->_username = $username;
$this->_timeout = $timeout;
} // __construct
public function connect()
{
}
public function dosomethingelse()
{
}
}//end class
我已将所有这些代码移到一个单独的文件中,此文件现在位于我的库文件夹中。但是我在确定如何在模型中正确实例化对象时遇到了问题。 我试过了:
//pass all the data we need as an array of parameters.
$params = array('_hostname' => '$ip', '_password' => 'password', '_username' => '');
$hp = $this->load->library($classname,$params );
$hp->connect();
$data= $hp->dosomethingelse();
$hp->close();
它正在加载正确的类,但我收到以下错误消息:
严重性:警告
消息:缺少参数2的HP5406_ssh :: __ construct(),调用 第1095行的/var/www/m.racktables/system/core/Loader.php并定义了
文件名:libraries / HP5406_ssh.php
行号:22
参数二是密码 对不起,这是我第一次尝试使用带有codeigniter的库 如果你能提供一些建议,我们将不胜感激。
答案 0 :(得分:1)
问题是构造函数不期望数组。根据libraries部分下的codeigniter手册中的示例,我正在传递的内容。我改变了我的构造函数以接受一个数组,现在它的工作原理。 我将发布另一个问题,看看我如何通过个人参赛。
答案 1 :(得分:0)
而不是这样做:
$hp = $this->load->library($classname,$params ); //switch model name must be capitalized.
$hp->connect();
$data= $hp->dosomethingelse();
$hp->close();
这样做:
$this->load->library($classname, $params);
$classname = strtolower($classname); // get the classname to lowercase for CI
$this->$classname->connect();
$data = $this->$classname->dosomethingelse();
$this->$classname->close();
CodeIgniter将库类实例加载到$this
。这有点奇怪,但它与其他CI的工作方式一致。如果您不喜欢这种方法,您可以随时include()
或require()
使用该类,并以“正常”方式使用它。
请参阅Creating Libraries的文档。
以下是相关部分:
您可以在任何Controller功能中初始化 使用标准的课程:
$this->load->library('someclass');
其中someclass是文件名,没有“.php”文件扩展名。 您可以提交大写或小写的文件名。笨 不在乎。
加载后,您可以使用 小写 版本访问您的课程:
$this->someclass->some_function(); // Object instances will always be lower case