我是阿北,Yii学习社群正在搞技术文竞赛(获胜者送VIP权限),邀请你参加。 另外我的订阅号送书中,看详情
阿北
阿北 发布于 3个月前

2018-03-08 / [PHP] yii2中组件类构造函数的问题

PHP

在yii2中有一个非常重要的Component类,当我们新建一个继承于Component的类时,然后对该类构造函数传递参数,比如代码

namespace app\components;

class Car extends \yii\base\Component {
    ...
}

接下来对构造函数传递参数

$car = new Car(['name'=>'雪铁龙']);

题面

我的题面是当执行 $car = new Car(['name'=>'雪铁龙']);后,参数['name'=>'雪铁龙']到哪里去了?以及是什么样的思路。

这是个非常重要的逻辑,该逻辑也作用于yii2中Yii::createObject()函数。

////////////////

我的答案在2楼

1-2条,共2条数据.
顶宝爸
3个月前
# 559

作用在给对应名字和公共属性上

阿北
3个月前
# 560

感谢 Toboo 的回答,具体可以看下 vendor/yiisoft/yii2/base/BaseObject.php 的构造函数

public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

重点就在于 Yii::configure($this, $config) 函数,我们来看一看。

// vendor/yiisoft/yii2/BaseYii.php
public static function configure($object, $properties)
{
    foreach ($properties as $name => $value) {
        $object->$name = $value;
    }

    return $object;
}

你是否看明白,configure函数的作用是为一个对象的公共属性赋值,然后将赋值后的对象自身返回。

因此我们的结论是:参数是一个数组,根据对应key找到对象中同名的公共属性,将value值赋值给它。

-
在线