<?php /** * CBehavior class file. * * @author Qiang Xue <qiang.xue@gmail.com> * @link http://www.yiiframework.com/ * @copyright Copyright © 2008-2009 Yii Software LLC * @license http://www.yiiframework.com/license/ */ /** * CBehavior is a convenient base class for behavior classes. * @author Qiang Xue <qiang.xue@gmail.com> * @version $Id: CBehavior.php 564 2009-01-21 22:07:10Z qiang.xue $ * @package system.base * @since 1.0.2 */ class TBehavior extends TComponent implements IBehavior { private $_enabled; private $_owner; /** * Declares events and the corresponding event handler methods. * The events are defined by the {@link owner} component, while the handler * methods by the behavior class. The handlers will be attached to the corresponding * events when the behavior is attached to the {@link owner} component; and they * will be detached from the events when the behavior is detached from the component. * @return array events (array keys) and the corresponding event handler methods (array values). */ public function events() { return array(); } /** * Attaches the behavior object to the component. * The default implementation will set the {@link owner} property * and attach event handlers as declared in {@link events}. * Make sure you call the parent implementation if you override this method. * @param CComponent the component that this behavior is to be attached to. */ public function attach($owner) { $this->_owner=$owner; foreach($this->events() as $event=>$handler) $owner->attachEventHandler($event,array($this,$handler)); } /** * Detaches the behavior object from the component. * The default implementation will unset the {@link owner} property * and detach event handlers declared in {@link events}. * Make sure you call the parent implementation if you override this method. * @param CComponent the component that this behavior is to be detached from. */ public function detach($owner) { foreach($this->events() as $event=>$handler) $owner->detachEventHandler($event,array($this,$handler)); $this->_owner=null; } /** * @return CComponent the owner component that this behavior is attached to. */ public function getOwner() { return $this->_owner; } /** * @return boolean whether this behavior is enabled */ public function getEnabled() { return $this->_enabled; } /** * @param boolean whether this behavior is enabled */ public function setEnabled($value) { $this->_enabled=$value; } } /** * IBehavior interfaces is implemented by all behavior classes. * * A behavior is a way to enhance a component with additional methods that * are defined in the behavior class and not available in the component class. * * @author Qiang Xue <qiang.xue@gmail.com> * @version $Id: interfaces.php 956 2009-04-21 15:16:03Z qiang.xue@gmail.com $ * @package system.base * @since 1.0.2 */ interface IBehavior { /** * Attaches the behavior object to the component. * @param CComponent the component that this behavior is to be attached to. */ public function attach($component); /** * Detaches the behavior object from the component. * @param CComponent the component that this behavior is to be detached from. */ public function detach($component); /** * @return boolean whether this behavior is enabled */ public function getEnabled(); /** * @param boolean whether this behavior is enabled */ public function setEnabled($value); }