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();