初始化库中的类


initializing a class from a library

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

   <?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