在实例化PHP时,会出现例如传递的参数

时间:2018-01-24 13:19:42

标签: php codeigniter

实例化类时,有时会传递给该类构造函数的参数/参数

<!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中期望它们的顺序传递这些参数?

3 个答案:

答案 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。