如何使用构造函数中传递的数组

时间:2017-07-21 03:45:46

标签: php constructor

我对构造函数很困惑。我需要将一个数组传递给一个类。我现在有2个数据传递给数组。

现在从这个数组中,我需要定义$this->m_id$this->community_type,以便我可以在类中使用这些变量。以下是我的例子。

$arr = array('id'=>$u_id, 'community_type' => $community_type);
$rate = new Registration($arr);

class Registration{
    protected $m_id;
    protected $community_type;

    public function __construct(array $arr = array())
    {
        foreach ($arr as $key => $value) {
            $this->$key = $value;
        }
    }
}

我希望设置

$this->m_id = $m_id;
$this->community_type = $community_type;

我尝试使用for循环,但我不知道出了什么问题。 任何人都可以帮助我

2 个答案:

答案 0 :(得分:1)

您可以尝试$array[your_array_key],如下所示

public function __construct(array $arr = array())
{
    $this->m_id = $arr['id'];
    $this->community_type = $arr['community_type'];
}

你现有的代码应该可行,如果你正在尝试循环,只有我能注意到的问题是,

  protected $m_id;

您需要将其更改为

 protected $id;

因为,在你的循环中,你假设你的密钥是成员变量,实际上不是。

   foreach ($arr as $key => $value) {
        $this->$key = $value;
    }

在你是数组中,你的第一个键是id,其中成员变量被声明为m_id,这是不匹配的。

答案 1 :(得分:1)

在终端中运行时,它显示对象的属性是按照预期动态创建的:

php > class Registration{
php {     protected $m_id;
php {     protected $community_type;
php { 
php {     public function __construct(array $arr = array())
php {     {
php {         foreach ($arr as $key => $value) {
php {             $this->$key = $value;
php {         }
php {     }
php { }
php > $u_id = 'u_id value';
php > $community_type = 'community type value';
php > 
php > $arr = array('id'=>$u_id, 'community_type' => $community_type);
php > $rate = new Registration($arr);
php > 
php > var_dump($rate);
object(Registration)#1 (3) {
  ["m_id":protected]=>
  NULL
  ["community_type":protected]=>
  string(20) "community type value"
  ["id"]=>
  string(10) "u_id value"
}

我认为有几个令人困惑的因素可能让你失望:

  1. 是否分配了$u_id$community_type变量?他们不在你的代码中。
  2. 关于变量名称存在一些混淆:$m_id vs $u_id['id'] vs $this->m_id
  3. 受保护使他们更难进入。
  4. var_dump显示数组的键(['id']['community_type']确实被指定为对象的属性。