【问题标题】:Load library by passing parameter to constructor in codeigniter通过将参数传递给codeigniter中的构造函数来加载库
【发布时间】:2012-05-26 04:10:54
【问题描述】:

我正在使用 codeigniter。我在 code-igniter 中定义了一个库,并期望在其构造函数中有一个参数。这是我的库代码 -

################# [My Library Code Test_lib.php ] ########################
<?php
class Test_lib
{
var $params;
public function __construct($params)
{
    $this->params = $params;
    echo $this->params;
}
}

在 codeigniter 文档中,提到您可以在第二个参数中传递参数。 所以,我从控制器初始化它如下 -

<?php
class Test_cont extends CI_Controller {
function __construct()
{
    parent::__construct();
}

function test()
{
    $params = "abc";
    $this->load->library("test_lib",$params);
}
}   

我收到以下错误 -

遇到 PHP 错误严重性:警告消息:缺少参数.....

请帮忙。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    类Test_lib

    ################# [My Library Code Test_lib.php ] ########################
    <?php
    
    class Test_lib {
    
      var $parameter1;
      var $parameter2;
      var $parameter3;
    
      public function __construct($parameters) {
    
        /* array assoc */
        $this->parameter1 = $parameters['argument1'];
        $this->parameter2 = $parameters['argument2'];
        $this->parameter3 = $parameters['argument3'];
    
        /* object */
        $oParameters = (object) $parameters;
    
        $this->parameter1 = $oParameters->argument1;
        $this->parameter2 = $oParameters->argument2;
        $this->parameter3 = $oParameters->argument3;
    
      }
    
    }
    

    类控制器

    <?php
    
      class Test_cont extends CI_Controller {
    
        function __construct() {
          parent::__construct();
        }
    
        function test() {
    
          $data = array( // array assoc
            'argument1' => 'String 1',
            'argument2' => 'String 2',
            'argument3' => 'String 3'
          );
    
          $this->load->library("Test_lib", $data);
    
          return $this->Test_lib->parameter1;
    
        }
    
        echo $this->test(); // String 1
    
      }
    

    【讨论】:

      【解决方案2】:

      $params 必须是一个数组。 From the documentation:

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

      $params = array('type' => 'large', 'color' => 'red');
      
      $this->load->library('Someclass', $params);
      

      在你的情况下,你想做这样的事情:

      function test()
      {
          $params[] = "abc"; // $params is an array
          $this->load->library("test_lib",$params);
      }
      

      【讨论】:

      • 如果我的构造函数类似于函数__construct($param1 = null, $param2 = null, $param3 = null) 那么如何传递参数???/
      • 意思是如果我不想传递一个数组。
      • 你可以默认传递NULL。
      【解决方案3】:

      您只需要将 $params 从变量修改为数组。希望这会奏效

      function test()
      {
          $params = array(1=>'abc');
          $this->load->library('test_lib',$params);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 1970-01-01
        • 2013-02-19
        • 1970-01-01
        相关资源
        最近更新 更多