实例化类时,有时会传递给该类构造函数的参数/参数
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<figure data-type="rtv-quotes">
<blockquote contenteditable="false">Test quote<footer><a id="link" href="Random Source">Test Author</a></footer></blockquote>
</figure>
</body>
</html>
类构造函数依赖于在Codeigniter中运行的那些参数,它们声明在使用时必须以数组的形式传递参数
class MyLibrary{
function __construct($param1, $param2, $param3){
/*
* do something with those params
* Here im setting "something" to be $param3 instead of param1 nor param2
*/
$this->something = $param3; //I used param three to clarify my question
}
}
所以我的问题是,我如何按照构造函数在Codeigniter中期望它们的顺序传递这些参数?
答案 0 :(得分:0)
基于您在上面定义的数组$arg
$this->something = $arg['param3'];
如果您的问题是“如何定义接受__construct
的参数的自定义类,可以使用$this->load->library()
加载?”答案是为参数使用关联数组。 `load'类只允许一个参数,因此你必须使用一个数组来传递多个值。
所有核心库都使用关联数组将参数传递给类构造函数。
您的图书馆必须这样定义。
<强> /application/libraries/Custom_library.php 强>
class Custom_library
{
public function __construct($args = array()){
//code here
}
}
如果Custom_library
需要三个参数,那么您需要创建并传递一个具有三个名称/值对的关联数组。在控制器中它可能看起来像这样。
class Example extends CI_Controller
{
public function __construct()
{
parent::__construct();
//create an associative array
$args = ['param1' => '1', 'param2' => '2', 'param3' => '3'];
//pass array to library
$this->load->library('custom_library', $args);
}
}
要使用上述控制器,可能会像这样定义Custom_library
的更完整版本
class Custom_library
{
protected $foo;
protected $bar;
protected $baz;
public function __construct($args = array())
{
if(!empty($args))
{
$this->foo = $args['param1'];
$this->bar = $args['param2'];
$this->baz = $args['param3'];
}
}
}
答案 1 :(得分:0)
您的构造函数将按照填充它的顺序接收数组。
所以当你这样做时:
$arg = ['param1' => '1', 'param2' => '2', 'param3' => '3'];
$this->load->library('MyLibrary', $arg);
您图书馆中的构造函数必须如下:
public function __construct($args)
{
// Do something with $args like:
$this->var1 = $args['param1'];
$this->var2 = $args['param2'];
// etc
}
请参阅文档以供参考:https://www.codeigniter.com/user_guide/general/creating_libraries.html
答案 2 :(得分:0)
根据你的评论:
我理解这一点,所以有时候,这些是第三方图书馆和 我们不想修改它们,它们只是即插即用的库。 这些库只希望你传递这些参数
如果它不想要修改的第三方库,就像DFriend在他的回答中所建议的那样。
模型/控制器/基本控制器中的:
require_once(APPPATH . '/third_party/somename.php);
然后new Somename($param1, $param2, $param3)
你需要的地方。
这是不如何在CI中完成任务(如果你想修改,DFriends的回答是最好的),但我知道有时人们不想修改库,所以更新或无论什么都很简单,你可以在CI中使用普通的php。