Extending Yii is a common activity during development. For example, when you write a new controller, you extend Yii by inheriting its CController class; when you write a new widget, you are extending CWidget or an existing widget class. If the extended code is designed to be reused by third-party developers, we call it an extension.
An extension usually serves for a single purpose. In Yii's terms, it can be classified as follows,
An extension can also be a component that does not fall into any of the above categories. As a matter of fact, Yii is carefully designed such that nearly every piece of its code can be extended and customized to fit for individual needs.