在CodeIgniter中如何按类构造函数预期顺序传递实例化参数?
在CodeIgniter中按构造函数预期顺序传递参数的方法
当你的类构造函数是按位置参数定义的(比如你示例里MyLibrary的$param1, $param2, $param3),CodeIgniter的load->library()方法支持两种传参方式,要实现按顺序传递,你只需要用索引数组(不带键名的普通数组)来传递参数即可。
具体实现步骤
构造函数的参数顺序是$param1 → $param2 → $param3,你只需要把对应的值按相同顺序放进数组,直接传给load->library()的第二个参数:
// 严格按照构造函数参数顺序准备值,不需要键名 $args = ['1', '2', '3']; // CI会自动将数组元素按顺序映射到构造函数的参数上 $this->load->library('MyLibrary', $args);
这样CI内部会把数组第一个元素'1'传给$param1,第二个'2'传给$param2,第三个'3'传给$param3,完全匹配你构造函数的预期逻辑。
为什么关联数组不符合需求?
如果传你示例里的关联数组(['param1' => '1', 'param2' => '2', 'param3' => '3']),CodeIgniter会把整个关联数组作为单个参数传给构造函数的第一个参数$param1,导致$param2和$param3没有被赋值,出现参数不匹配的问题,这显然不是你想要的结果。
带自定义实例名的场景
如果你需要给库实例设置自定义名称(load->library()的第三个参数),依然可以正常使用索引数组传参,不会影响参数顺序:
$args = ['1', '2', '3']; $this->load->library('MyLibrary', $args, 'custom_name'); // 后续通过自定义名称访问库实例 echo $this->custom_name->something; // 会输出'3',和构造函数的赋值逻辑一致
内容的提问来源于stack exchange,提问作者Ntiyiso Rikhotso
相关产品推荐
相关产品推荐

