Php codeigniter-从库初始化类

Php codeigniter-从库初始化类,php,codeigniter,Php,Codeigniter,我有一个模型,其中定义了一个不相关的类。 我在做原型,没有花时间正确地创建它。 既然原型已经被我的最终用户接受了,我将再次访问,并希望正确地重新编写代码。这个类看起来像这样: <?php class myclassABC { private $_hostname; private $_password; private $_username; private

我有一个模型,其中定义了一个不相关的类。
我在做原型,没有花时间正确地创建它。 既然原型已经被我的最终用户接受了,我将再次访问,并希望正确地重新编写代码。这个类看起来像这样:

   <?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
它正在加载正确的类,但我收到以下错误消息:

严重性:警告

消息:缺少HP5406_ssh::_构造()的参数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”文件扩展名。 您可以提交大写或小写的文件名。共点火器 我不在乎

加载后,您可以使用小写版本访问您的类:
$this->someclass->someu函数();//对象实例总是小写的


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

Brendan,谢谢你的建议。但这似乎不起作用。获取以下消息:致命错误:在第84I行的/var/www/myapp/application/models/my_model.php中的非对象上调用成员函数connect(),出于说明目的,我在$classname中留下,但您应该在其位置使用类名,即hp5406_ssh。请记住,引用将全部使用小写,因此您可以使用$classname=strtolower($classname);并保留$classname的使用。嘿,brendan…我想让它成为动态的,所以我需要保留$classname作为变量,而不是硬编码它。问题是,类名将作为参数传递给我。如果我不能使用varialbe作为类名,我想我必须重新考虑这个设计……所以使用
strtolower
以便它可以使用它。“参数二是密码。”?如何在php中检测关联数组中的第n个值是多少?我认为这是不可能的(听起来确实很荒谬)。我说得对吗?啊,我明白了。是否有需要传递单个参数的原因?这仅仅是您个人的原因还是技术原因?因为我希望能够在CI解决方案之外重用此类。又称作我有其他的解决方案也依赖于这个类。。。但是他们例示了“传统”的方式…有没有一个原因你不能在其他解决方案中传递数组?没有。。。除了我不想回去更改当前正在运行的代码之外。
$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();