资讯专栏INFORMATION COLUMN

Yii2 框架核心概念之组件(手册翻译)

nemo / 1909人阅读

摘要:可以在方法里实现例行检查和属性正常化检查对象方法调用开始的三个阶段都在构造函数里实现,这意味着当你得到一个对象的实例时,它已经被初始化为适当的状态,可以被放心的使用。

组件

组件是YII框架application(应用)的主要组成部分,它是 [yiiaseComponent]的实例或者子类。组件有三个重要特征(功能):

属性(properties)

事件(events)

行为(behaviors)

多带带或者组合使用这些特征,可以让yii框架的类变得更加易用和可定制。举个例子,引入一个用户交互组件[yiijuiDataPickerdata picker wigets],可以很轻松的在视图中生成一个日期选择控件(jquery ui date picker).

use yiijuiDatePicker;

echo DatePicker::widget([
    "language" => "ru",
    "name"  => "country",
    "clientOptions" => [
        "dateFormat" => "yy-mm-dd",
    ],
]);

DatePicker挂件的属性很容易被修改,原因就在于他继承了类[yiiaseComponet]

尽管组件很强大,但是其开销也大于普通的类对象,原因在于组件需要额外的内存和CPU时间去处理事件(events)和行为(behaviors).如果你的组件不需要事件和行为这两个特征(功能),可以直接继承[yiiaseObject],这样你的组件在性能(效率)上和普通类对象一致,且支持属性(properties).

编写一个继承[yiiaseComponent]或者[yiiaseObject]的类,需要遵循以下约定:

假设你重写了构造函数,必须定义一个参数$config,作为构造函数的最后一个参数,此参数被传递给父类的构造函数使用

在重写的构造函数的结尾必须调用父类的构造函数

假设你重写了[yiiaseObject::init()|init()]方法,那么必须在重写的init方法开始调用父类的init方法

举个例子

namespace yiicomponentsMyClass;

use yiiaseObject;

class MyClass extends Object
{
    public $prop1;
    public $prop2;

    public function __construct($param1, $param2, $config = [])
    {
        // ... initialization before configuration is applied

        parent::__construct($config);
    }

    public function init()
    {
        parent::init();

        // ... initialization after configuration is applied
    }
}

遵循如下示例,可使你的组件在创建时属性即可被配置(初始化):

$component = new MyClass(1, 2, ["prop1" => 3, "prop2" => 4]);
// alternatively
$component = Yii::createObject([
    "class" => MyClass::className(),
    "prop1" => 3,
    "prop2" => 4,
], [1, 2]);
  

提示: 使用[Yii::createOject()]的方式看起来更加复杂,但是因为[Yii::createObject]是基于依赖注入的实现,因此更加强大

[yiiaseObject]类强制实现如下生命周期:

在构造函数里实现预初始化,可以在这个时候设定默认的属性值

通过$config配置对象,在构造函数里通过对象配置可以覆盖默认值

在[yiiaseObject::init()|init()]方法里,进行初始化后的配置。可以在init方法里实现例行检查和属性正常化检查

对象方法调用

开始的三个阶段都在构造函数里实现,这意味着当你得到一个对象的实例时,它已经被初始化为适当的状态,可以被放心的使用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20764.html

相关文章

  • Yii2 框架核心概念属性(手册翻译

    摘要:属性在里,类的成员变量也被称之为属性,这些变量是类定义的一部分,被用来表示类实例的状态区分不同类实例。不同之处在于,当属性被读时,关联的方法被调用,当属性被修改时,关联的方法被调用。 属性 在PHP里,类的成员变量也被称之为属性,这些变量是类定义的一部分,被用来表示类实例的状态(区分不同类实例)。在具体的实践中,你可能要经常处理可读或者可写属性的特殊方式,举个例子, 你可能想要给属性...

    awesome23 评论0 收藏0
  • Yii修行路 - Extension 扩展

    摘要:运行来安装指定的扩展。这更便于用户辨别是否是的扩展。当用户运行安装一个扩展时,文件会被自动更新使之包含新扩展的信息。上述代码表明该扩展依赖于包。例如,上述的条目声明将对应于别名。为达到这个目的,你应当在公开发布前做测试。 简述 扩展是专门设计的在 Yii 应用中随时可拿来使用的, 并可重发布的软件包。 基础 例如, yiisoft/yii2-debug 扩展在你的应用的每个页面底部添加...

    bovenson 评论0 收藏0
  • SegmentFault 社区访谈 | mcfog:自由进出 Coding && A

    摘要:上次的访谈,介绍了下可爱的依云酱,回忆传送门。这里简单地介绍下龙女仆,全名小林家的龙女仆,为什么介绍这部剧呢因为设计狮颜值同学也安利了这部。剧情简介在独身又劳累的小林划重点一名程序员身边突然出现的穿着女仆服装的美少女托尔。 showImg(https://segmentfault.com/img/bVR6p5?w=900&h=385); 上次的访谈,介绍了下可爱的依云酱,回忆传送门。不...

    neroneroffy 评论0 收藏0
  • SegmentFault 社区访谈 | mcfog:自由进出 Coding && A

    摘要:上次的访谈,介绍了下可爱的依云酱,回忆传送门。这里简单地介绍下龙女仆,全名小林家的龙女仆,为什么介绍这部剧呢因为设计狮颜值同学也安利了这部。剧情简介在独身又劳累的小林划重点一名程序员身边突然出现的穿着女仆服装的美少女托尔。 showImg(https://segmentfault.com/img/bVR6p5?w=900&h=385); 上次的访谈,介绍了下可爱的依云酱,回忆传送门。不...

    lx1036 评论0 收藏0
  • yii2代码学习-BaseYii

    摘要:框架的版本已经发布,版本最低要求是,将会在今年早些时候推出正式版。阅读的代码,能学到很多东西,代码写的很优雅,用到了很多版本的新特性。 yii框架的v-2.0-alpha版本已经发布,PHP版本最低要求是PHP-5.4,将会在今年早些时候推出正式版。阅读yii2的代码,能学到很多东西,代码写的很优雅,用到了很多php-5.4版本的新特性。 BaseYii这个类,在yii2框架中被称作...

    chavesgu 评论0 收藏0

发表评论

0条评论

nemo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<