Changes
Title
unchanged
Behaviors & events
Category
unchanged
Tutorials
Yii version
unchanged
Tags
unchanged
Content
changed
[...]
For example, [enabling gzip](http://www.yiiframework.com/doc/cookbook/39/) compression on the output could be done via extending CWebApplication. But because there are entry points for event handlers, one can do this:
```php
Yii::app()->onbBeginRequest = create_function('$event', 'return ob_start("ob_gzhandler");'),
Yii::app()->on
eEndRequest = create_function('$event', 'return ob_end_flush();'),
```[...]
```
So, basically, it allows you to build a list of function calls that can later be executed, in the order they were added. It can save you passing around a lot of object refs and building conditional code, since you can still raise the event, even if it doesn't do anything.
##Behaviors
Behaviors are simply a way of adding methods to an object.
Take this scenario:
You have 2 classes: MySuperClass1, MySuperClass2.
There might be lots of methods from MySuperClass1 & 2 that you want in some new class, say MyBoringClass. Unfortunately, php does not allow for this:
```php
class MyBoringClass extends MySuperClass1, MySuperClass2 {
}
```
This is where behaviors come in. Instead, you can go:
```php
class MyBoringClass extends MySuperClass1 {
}
$classInstance = new MyBoringClass();
$classInstance->attachbehavior('uniqueName', new MySuperClass2);
```
Now $classInstance has all the methods from MySuperClass1 and MySuperClass2. Since MySuperClass2 is being used as a behavior, it has to extend CBehavior.
The only caveat to this is an attached behavior cannot override any class methods of the component it is being attached to. If a method already exists, if it be from the original class or already added by a previously attached behavior, it will not be overwritten.
In an OO language like Ruby, it's quite possible to start with a
n completely empty object and simply build its behavior as you go along. Yii provides this behavior with a little magic. The key is that the class you wish to add the behavior from must extend Cbehavior.[...]
So, in this case, you are extending the functionality of an object with functionality of another object.
After studying this cookbook page it isyou are encouraged to reread the [corresponding guide page](http://www.yiiframework.com/doc/guide/basics.component) as it contains advanced information (for example, if you are familiar with interfaces, you might find it enough to implement IBehavior before extending CBehavior).
- Russian version: [Поведение и события](http://phptime.ru/blog/yii/31.html)