我有一个模型,里面定义了一个不相关的类。
我正在制作原型,没有花时间来正确地创建它。现在原型已经被我的最终用户接受了,我正在重新访问,我想正确地重组我的代码。这个类看起来像这样:
<?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();
它正在加载正确的类,但我收到以下错误消息:
严重性:警告
消息:HP5406_sh::__construct()缺少参数2,在中调用/第1095行的var/www/m.racktables/system/core/Loader.php和定义的
文件名:libraries/HP5406_ssh.php
线路编号:22
参数二是密码
抱歉,这是我第一次尝试使用带有codeigniter的库
如果你能提供一些建议,我们将不胜感激。
问题是构造函数不需要数组。这就是我所传递的,基于库部分下的代码点火器手册中的示例。我更改了构造函数以接受数组,现在它可以工作了。我将发布另一个问题,看看我如何通过个人标准杆。
不要这样做:
$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()
,并以"正常"的方式使用它。
请参阅有关创建库的文档。
以下是相关部分:
在任何控制器函数中,您都可以初始化使用标准分类:
$this->load->library('someclass');
其中someclass是文件名,没有".php"文件扩展名。您可以提交大写或小写的文件名。CodeIgniter不在乎。
加载后,您可以使用小写版本访问您的类:
$this->someclass->some_function(); // Object instances will always be lower case