0

我有一个模型,其中定义了一个不相关的类。
我正在制作原型,并没有花时间正确地创建它。现在原型已被我的最终用户接受,我正在重新访问并且我想正确地重组我的代码。该类看起来像这样:

   <?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_ssh::__construct() 缺少参数 2,在第 1095 行的 /var/www/m.racktables/system/core/Loader.php 中调用并定义

文件名:库/HP5406_ssh.php

行号:22

参数二是密码。
抱歉,这是我第一次尝试使用带有 codeigniter 的库。
如果您能提供一些建议,将不胜感激。

4

2 回答 2

1

问题是构造函数不期望一个数组。根据库部分下的 codeigniter 手册中的示例,这就是我要传递的内容。我更改了我的构造函数以接受一个数组,现在它可以工作了。我将发布另一个问题,看看我如何通过个人参数。

于 2012-08-30T20:40:57.787 回答
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()类并以“正常”的方式使用它。

请参阅创建库的文档。

这是相关部分:

在您的任何 Controller 函数中,您可以使用以下标准初始化您的类: $this->load->library('someclass');

其中 someclass 是文件名,没有“.php”文件扩展名。您可以提交大写或小写的文件名。CodeIgniter 不在乎。

加载后,您可以使用小写版本访问您的类: $this->someclass->some_function(); // Object instances will always be lower case

于 2012-08-30T19:54:25.610 回答