Difference between #1 and #7 of
Behaviors & events

Changes

Title unchanged

Behaviors & events

Category unchanged

Tutorials

Yii version unchanged

Tags unchanged

Content changed

These features provide endless possibilities and unbelievable flexibility, but as current documentation does not give more than a few examples, it might be difficult to fully understand their internals and requirements. It should be noted that they do mostly the same thing. You can attach behaviors and event handlers to components to modify the components' behavior. ##Events
 
 
It is useful when you want to interrupt the normal application flow without extending base classes.

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()->on
bBeginRequest = create_function('$event', 'return ob_start("ob_gzhandler");'), Yii::app()->oneEndRequest = 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 an 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)
43 0
48 followers
Viewed: 162 106 times
Version: 1.1
Category: Tutorials
Tags:
Written by: pestaa
Last updated by: Gismo
Created on: Aug 24, 2009
Last updated: 11 years ago
Update Article

Revisions

View all history