【问题标题】:Passing arguments when loading custom CodeIgniter library加载自定义 CodeIgniter 库时传递参数
【发布时间】:2011-03-29 16:20:36
【问题描述】:

我正在尝试实现一个已编写为 CodeIgniter 库的类。

不知何故,我无法让 CI 的 load() 方法将多个参数传递给类的构造函数。

我的类被设计为获取 3 个参数、2 个数组和一个可选字符串。

构造函数看起来有点像这样:

public function __construct($array, $array,$string=""){
/** code **/
}

来自控制器的相关部分:

function index(){
  $array1 = array('key1'=>'value','key2'=>'value');
  $array2 = array('key1'=>'value','key2'=>'value');
  $string = "value";
  $params = array($array1,$array2,$string);
  $this->load->library("MyClass",$params);
}

加载控制器会产生这个错误:

Message: Missing argument 2 for MyClass::__construct()

这真的让我很困惑。似乎第一个参数被很好地发送,然后它被第二个参数阻塞。任何有关为什么会发生这种情况的线索将不胜感激。

【问题讨论】:

标签: php codeigniter arguments class-library


【解决方案1】:

您需要修改您的类构造函数来处理传递的数据,如下所述:

https://www.codeigniter.com/user_guide/general/creating_libraries.html

public function __construct($params)
{
    $array1 = $params[0];
    $array2 = $params[1];
    $string = $params[2];

    // Rest of the code
}

【讨论】:

  • 其实我推荐使用关联数组将数据传递给构造函数。这使得代码更具可读性,使可选参数更易于使用,并且与内置库更加一致。
  • 链接无效,应该是ellislab.com/codeigniter/user-guide/general/… nowdays
【解决方案2】:

您在声明参数时忘记了 array2 上的 $,导致它作为未定义的常量而不是数组传递。

【讨论】:

    【解决方案3】:

    初始化类时传递参数

    在库加载函数中,您可以通过第二个参数将数据作为数组动态传递,并将其传递给您的类构造函数:

    $params = array('type' => 'large', 'color' => 'red');
    

    $this->load->library('Someclass', $params); 如果你使用这个特性,你必须设置你的类构造函数来接收数据:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Someclass {
    
        public function __construct($params)
        {
            // Do something with $params
        }
    }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多