DukeAnn
做一个优雅的程序员

Yii2学习笔记(一)

属性

  • 继承自 yii\base\Object
  • 声明一个用于保存该属性的私有成员变量。
  • 提供getter或setter函数,或两者都提供,用于访问、修改上面提到的私有成员变量。 如果只提供了getter,那么该属性为只读属性,只提供了setter,则为只写。

事件

Yii中,事件是在 yii\base\Component 中引入的,注意, yii\base\Object 不支持事件。所以,当你需要使用事件时,请从 yii\base\Component 进行继承。同时,Yii中还有一个与事件紧密相关的 yii\base\Event ,他封装了与事件相关的有关数据,并提供一些功能函数作为辅助:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Event extends Object
{
    public $name;               // 事件名
    public $sender;             // 事件发布者,通常是调用了 trigger() 的对象或类。
    public $handled = false;    // 是否终止事件的后续处理
    public $data;               // 事件相关数据

    private static $_events = [];

    public static function on($class, $name, $handler, $data = null,
        $append = true)
    {
        // ... ...
        // 用于绑定事件handler
    }

    public static function off($class, $name, $handler = null)
    {
        // ... ...
        // 用于取消事件handler绑定
    }

    public static function hasHandlers($class, $name)
    {
        // ... ...
        // 用于判断是否有相应的handler与事件对应
    }

    public static function trigger($class, $name, $event = null)
    {
        // ... ...
        // 用于触发事件
    }
}

有了事件handler,还要告诉Yii,这个handler是负责处理哪种事件的。这个过程,就是事件的绑定, 把事件和事件handler这两个蚂蚱绑在一根绳上,当事件跳起来的时候,就会扯动事件handler啦。

yii\base\Component::on() 就是用来绑定的,很容易就猜到, yii\base\Component::off() 就是用来解除的。对于绑定,有以下形式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$person = new Person;

// 使用PHP全局函数作为handler来进行绑定
$person->on(Person::EVENT_GREET, 'person_say_hello');

// 使用对象$obj的成员函数say_hello来进行绑定
$person->on(Person::EVENT_GREET, [$obj, 'say_hello']);

// 使用类Greet的静态成员函数say_hello进行绑定
$person->on(Person::EVENT_GREET, ['app\helper\Greet', 'say_hello']);

// 使用匿名函数
$person->on(Person::EVENT_GREET, function ($event) {
    echo 'Hello';
});

行为

Yii中的行为,其实是 yii\base\Behavior 类的实例, 只要将一个Behavior实例绑定到任意的 yii\base\Component 实例上, 这个Component就可以拥有该Behavior所定义的属性和方法了。而如果将行为与事件关联起来,可以玩的花样就更多了。

但有一点需要注意,Behavior只能与Component类绑定。 他们是天生的一对,爱情不是你想买,想买就能买的,必要的物质是少不了的,奋斗吧少年。 所以,如果你写了一个类,需要使用到行为,那么就果断地继承自 yii\base\Component 。

同时,行为单独靠Behavior一方是实现不了的,就好像爱情不是一厢情愿。 为了支持Behavior,Yii对于 yii\base\Component 也进行了精心设计,这两者共同配合,才有了神奇的行为。

DukeAnn的笔记本:DukeAnn的博客 » Yii2学习笔记(一)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址