codeigniter - 从库初始化类

时间:2012-08-30 19:49:23

标签: php codeigniter

我有一个模型,里面定义了一个不相关的类。
我是原型设计,并没有花时间正确创建它。 既然我的最终用户接受了原型,我正在重新访问,我想正确地重新编写我的代码。该课程看起来像这样:

   <?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的库 如果你能提供一些建议,我们将不胜感激。

2 个答案:

答案 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