Package | system.base |
---|---|
Inheritance | class CComponent |
Subclasses | CAccessRule, CAction, CActiveFinder, CApplicationComponent, CAuthAssignment, CAuthItem, CBaseActiveRelation, CBaseController, CBaseUrlRule, CBaseUserIdentity, CBehavior, CCacheDependency, CChainedCacheDependency, CChainedLogFilter, CCodeFile, CConsoleCommand, CConsoleCommandRunner, CDataProvider, CDataProviderIterator, CDateFormatter, CDbColumnSchema, CDbCommand, CDbCommandBuilder, CDbCriteria, CDbDataReader, CDbExpression, CDbMigration, CDbSchema, CDbTableSchema, CDbTransaction, CEvent, CFilter, CFormElement, CGettextFile, CGridColumn, CHttpCookie, CList, CLocale, CLogFilter, CLogRoute, CLogger, CMap, CMemCacheServerConfiguration, CModel, CModule, CNumberFormatter, CPagination, CQueue, CSort, CStack, CTheme, CUploadedFile, CValidator, CWebService, CWsdlGenerator |
Since | 1.0 |
Source Code | framework/base/CComponent.php |
$a=$component->text; // equivalent to $a=$component->getText(); $component->text='abc'; // equivalent to $component->setText('abc');The signatures of getter and setter methods are as follows,
// getter, defines a readable property 'text' public function getText() { ... } // setter, defines a writable property 'text' with $value to be set to the property public function setText($value) { ... }
function eventHandler($event) { ... }where $event includes parameters associated with the event.
$component->onClick=$callback; // or $component->onClick->add($callback);where $callback refers to a valid PHP callback. Below we show some callback examples:
'handleOnClick' // handleOnClick() is a global function array($object,'handleOnClick') // using $object->handleOnClick() array('Page','handleOnClick') // using Page::handleOnClick()
public function onClick($event) { $this->raiseEvent('onClick',$event); }where
$event
is an instance of CEvent or its child class.
One can then raise the event by calling the on-method instead of raiseEvent directly.
Method | Description | Defined By |
---|---|---|
__call() | Calls the named method which is not a class method. | CComponent |
__get() | Returns a property value, an event handler list or a behavior based on its name. | CComponent |
__isset() | Checks if a property value is null. | CComponent |
__set() | Sets value of a component property. | CComponent |
__unset() | Sets a component property to be null. | CComponent |
asa() | Returns the named behavior object. | CComponent |
attachBehavior() | Attaches a behavior to this component. | CComponent |
attachBehaviors() | Attaches a list of behaviors to the component. | CComponent |
attachEventHandler() | Attaches an event handler to an event. | CComponent |
canGetProperty() | Determines whether a property can be read. | CComponent |
canSetProperty() | Determines whether a property can be set. | CComponent |
detachBehavior() | Detaches a behavior from the component. | CComponent |
detachBehaviors() | Detaches all behaviors from the component. | CComponent |
detachEventHandler() | Detaches an existing event handler. | CComponent |
disableBehavior() | Disables an attached behavior. | CComponent |
disableBehaviors() | Disables all behaviors attached to this component. | CComponent |
enableBehavior() | Enables an attached behavior. | CComponent |
enableBehaviors() | Enables all behaviors attached to this component. | CComponent |
evaluateExpression() | Evaluates a PHP expression or callback under the context of this component. | CComponent |
getEventHandlers() | Returns the list of attached event handlers for an event. | CComponent |
hasEvent() | Determines whether an event is defined. | CComponent |
hasEventHandler() | Checks whether the named event has attached handlers. | CComponent |
hasProperty() | Determines whether a property is defined. | CComponent |
raiseEvent() | Raises an event. | CComponent |
public mixed __call(string $name, array $parameters)
| ||
$name | string | the method name |
$parameters | array | method parameters |
{return} | mixed | the method return value |
public function __call($name,$parameters)
{
if($this->_m!==null)
{
foreach($this->_m as $object)
{
if($object->getEnabled() && method_exists($object,$name))
return call_user_func_array(array($object,$name),$parameters);
}
}
if(class_exists('Closure', false) && ($this->canGetProperty($name) || property_exists($this, $name)) && $this->$name instanceof Closure)
return call_user_func_array($this->$name, $parameters);
throw new CException(Yii::t('yii','{class} and its behaviors do not have a method or closure named "{name}".',
array('{class}'=>get_class($this), '{name}'=>$name)));
}
Calls the named method which is not a class method. Do not call this method. This is a PHP magic method that we override to implement the behavior feature.
public mixed __get(string $name)
| ||
$name | string | the property name or event name |
{return} | mixed | the property value, event handlers attached to the event, or the named behavior |
public function __get($name)
{
$getter='get'.$name;
if(method_exists($this,$getter))
return $this->$getter();
elseif(strncasecmp($name,'on',2)===0 && method_exists($this,$name))
{
// duplicating getEventHandlers() here for performance
$name=strtolower($name);
if(!isset($this->_e[$name]))
$this->_e[$name]=new CList;
return $this->_e[$name];
}
elseif(isset($this->_m[$name]))
return $this->_m[$name];
elseif(is_array($this->_m))
{
foreach($this->_m as $object)
{
if($object->getEnabled() && (property_exists($object,$name) || $object->canGetProperty($name)))
return $object->$name;
}
}
throw new CException(Yii::t('yii','Property "{class}.{property}" is not defined.',
array('{class}'=>get_class($this), '{property}'=>$name)));
}
Returns a property value, an event handler list or a behavior based on its name. Do not call this method. This is a PHP magic method that we override to allow using the following syntax to read a property or obtain event handlers:
$value=$component->propertyName; $handlers=$component->eventName;
public boolean __isset(string $name)
| ||
$name | string | the property name or the event name |
{return} | boolean |
public function __isset($name)
{
$getter='get'.$name;
if(method_exists($this,$getter))
return $this->$getter()!==null;
elseif(strncasecmp($name,'on',2)===0 && method_exists($this,$name))
{
$name=strtolower($name);
return isset($this->_e[$name]) && $this->_e[$name]->getCount();
}
elseif(is_array($this->_m))
{
if(isset($this->_m[$name]))
return true;
foreach($this->_m as $object)
{
if($object->getEnabled() && (property_exists($object,$name) || $object->canGetProperty($name)))
return $object->$name!==null;
}
}
return false;
}
Checks if a property value is null. Do not call this method. This is a PHP magic method that we override to allow using isset() to detect if a component property is set or not.
public void __set(string $name, mixed $value)
| ||
$name | string | the property name or the event name |
$value | mixed | the property value or callback |
public function __set($name,$value)
{
$setter='set'.$name;
if(method_exists($this,$setter))
return $this->$setter($value);
elseif(strncasecmp($name,'on',2)===0 && method_exists($this,$name))
{
// duplicating getEventHandlers() here for performance
$name=strtolower($name);
if(!isset($this->_e[$name]))
$this->_e[$name]=new CList;
return $this->_e[$name]->add($value);
}
elseif(is_array($this->_m))
{
foreach($this->_m as $object)
{
if($object->getEnabled() && (property_exists($object,$name) || $object->canSetProperty($name)))
return $object->$name=$value;
}
}
if(method_exists($this,'get'.$name))
throw new CException(Yii::t('yii','Property "{class}.{property}" is read only.',
array('{class}'=>get_class($this), '{property}'=>$name)));
else
throw new CException(Yii::t('yii','Property "{class}.{property}" is not defined.',
array('{class}'=>get_class($this), '{property}'=>$name)));
}
Sets value of a component property. Do not call this method. This is a PHP magic method that we override to allow using the following syntax to set a property or attach an event handler
$this->propertyName=$value; $this->eventName=$callback;
public void __unset(string $name)
| ||
$name | string | the property name or the event name |
public function __unset($name)
{
$setter='set'.$name;
if(method_exists($this,$setter))
$this->$setter(null);
elseif(strncasecmp($name,'on',2)===0 && method_exists($this,$name))
unset($this->_e[strtolower($name)]);
elseif(is_array($this->_m))
{
if(isset($this->_m[$name]))
$this->detachBehavior($name);
else
{
foreach($this->_m as $object)
{
if($object->getEnabled())
{
if(property_exists($object,$name))
return $object->$name=null;
elseif($object->canSetProperty($name))
return $object->$setter(null);
}
}
}
}
elseif(method_exists($this,'get'.$name))
throw new CException(Yii::t('yii','Property "{class}.{property}" is read only.',
array('{class}'=>get_class($this), '{property}'=>$name)));
}
Sets a component property to be null. Do not call this method. This is a PHP magic method that we override to allow using unset() to set a component property to be null.
public IBehavior asa(string $behavior)
| ||
$behavior | string | the behavior name |
{return} | IBehavior | the behavior object, or null if the behavior does not exist |
public function asa($behavior)
{
return isset($this->_m[$behavior]) ? $this->_m[$behavior] : null;
}
Returns the named behavior object. The name 'asa' stands for 'as a'.
public IBehavior attachBehavior(string $name, mixed $behavior)
| ||
$name | string | the behavior's name. It should uniquely identify this behavior. |
$behavior | mixed | the behavior configuration. This is passed as the first parameter to YiiBase::createComponent to create the behavior object. You can also pass an already created behavior instance (the new behavior will replace an already created behavior with the same name, if it exists). |
{return} | IBehavior | the behavior object |
public function attachBehavior($name,$behavior)
{
if(!($behavior instanceof IBehavior))
$behavior=Yii::createComponent($behavior);
$behavior->setEnabled(true);
$behavior->attach($this);
return $this->_m[$name]=$behavior;
}
Attaches a behavior to this component. This method will create the behavior object based on the given configuration. After that, the behavior object will be initialized by calling its IBehavior::attach method.
public void attachBehaviors(array $behaviors)
| ||
$behaviors | array | list of behaviors to be attached to the component |
public function attachBehaviors($behaviors)
{
foreach($behaviors as $name=>$behavior)
$this->attachBehavior($name,$behavior);
}
Attaches a list of behaviors to the component. Each behavior is indexed by its name and should be an instance of IBehavior, a string specifying the behavior class, or an array of the following structure:
array( 'class'=>'path.to.BehaviorClass', 'property1'=>'value1', 'property2'=>'value2', )
public void attachEventHandler(string $name, callable $handler)
| ||
$name | string | the event name |
$handler | callable | the event handler |
public function attachEventHandler($name,$handler)
{
$this->getEventHandlers($name)->add($handler);
}
Attaches an event handler to an event.
An event handler must be a valid PHP callback, i.e., a string referring to
a global function name, or an array containing two elements with
the first element being an object and the second element a method name
of the object.
An event handler must be defined with the following signature,
function handlerName($event) {}where $event includes parameters associated with the event.
$component->getEventHandlers($eventName)->add($eventHandler);
$component->getEventHandlers($eventName)->insertAt(0,$eventHandler);makes the handler to be invoked first.
public boolean canGetProperty(string $name)
| ||
$name | string | the property name |
{return} | boolean | whether the property can be read |
public function canGetProperty($name)
{
return method_exists($this,'get'.$name);
}
Determines whether a property can be read. A property can be read if the class has a getter method for the property name. Note, property name is case-insensitive.
public boolean canSetProperty(string $name)
| ||
$name | string | the property name |
{return} | boolean | whether the property can be written |
public function canSetProperty($name)
{
return method_exists($this,'set'.$name);
}
Determines whether a property can be set. A property can be written if the class has a setter method for the property name. Note, property name is case-insensitive.
public IBehavior detachBehavior(string $name)
| ||
$name | string | the behavior's name. It uniquely identifies the behavior. |
{return} | IBehavior | the detached behavior. Null if the behavior does not exist. |
public function detachBehavior($name)
{
if(isset($this->_m[$name]))
{
$this->_m[$name]->detach($this);
$behavior=$this->_m[$name];
unset($this->_m[$name]);
return $behavior;
}
}
Detaches a behavior from the component. The behavior's IBehavior::detach method will be invoked.
public void detachBehaviors()
|
public function detachBehaviors()
{
if($this->_m!==null)
{
foreach($this->_m as $name=>$behavior)
$this->detachBehavior($name);
$this->_m=null;
}
}
Detaches all behaviors from the component.
public boolean detachEventHandler(string $name, callable $handler)
| ||
$name | string | event name |
$handler | callable | the event handler to be removed |
{return} | boolean | if the detachment process is successful |
public function detachEventHandler($name,$handler)
{
if($this->hasEventHandler($name))
return $this->getEventHandlers($name)->remove($handler)!==false;
else
return false;
}
Detaches an existing event handler. This method is the opposite of attachEventHandler.
public void disableBehavior(string $name)
| ||
$name | string | the behavior's name. It uniquely identifies the behavior. |
public function disableBehavior($name)
{
if(isset($this->_m[$name]))
$this->_m[$name]->setEnabled(false);
}
Disables an attached behavior. A behavior is only effective when it is enabled.
public void disableBehaviors()
|
public function disableBehaviors()
{
if($this->_m!==null)
{
foreach($this->_m as $behavior)
$behavior->setEnabled(false);
}
}
Disables all behaviors attached to this component.
public void enableBehavior(string $name)
| ||
$name | string | the behavior's name. It uniquely identifies the behavior. |
public function enableBehavior($name)
{
if(isset($this->_m[$name]))
$this->_m[$name]->setEnabled(true);
}
Enables an attached behavior. A behavior is only effective when it is enabled. A behavior is enabled when first attached.
public void enableBehaviors()
|
public function enableBehaviors()
{
if($this->_m!==null)
{
foreach($this->_m as $behavior)
$behavior->setEnabled(true);
}
}
Enables all behaviors attached to this component.
public mixed evaluateExpression(mixed $_expression_, array $_data_=array (
))
| ||
$_expression_ | mixed | a PHP expression or PHP callback to be evaluated. |
$_data_ | array | additional parameters to be passed to the above expression/callback. |
{return} | mixed | the expression result |
public function evaluateExpression($_expression_,$_data_=array())
{
if(is_string($_expression_))
{
extract($_data_);
try
{
return eval('return ' . $_expression_ . ';');
}
catch (ParseError $e)
{
return false;
}
}
else
{
$_data_[]=$this;
return call_user_func_array($_expression_, array_values($_data_));
}
}
Evaluates a PHP expression or callback under the context of this component.
Valid PHP callback can be class method name in the form of
array(ClassName/Object, MethodName), or anonymous function (only available in PHP 5.3.0 or above).
If a PHP callback is used, the corresponding function/method signature should be
function foo($param1, $param2, ..., $component) { ... }where the array elements in the second parameter to this method will be passed to the callback as $param1, $param2, ...; and the last parameter will be the component itself.
public CList getEventHandlers(string $name)
| ||
$name | string | the event name |
{return} | CList | list of attached event handlers for the event |
public function getEventHandlers($name)
{
if($this->hasEvent($name))
{
$name=strtolower($name);
if(!isset($this->_e[$name]))
$this->_e[$name]=new CList;
return $this->_e[$name];
}
else
throw new CException(Yii::t('yii','Event "{class}.{event}" is not defined.',
array('{class}'=>get_class($this), '{event}'=>$name)));
}
Returns the list of attached event handlers for an event.
public boolean hasEvent(string $name)
| ||
$name | string | the event name |
{return} | boolean | whether an event is defined |
public function hasEvent($name)
{
return !strncasecmp($name,'on',2) && method_exists($this,$name);
}
Determines whether an event is defined. An event is defined if the class has a method named like 'onXXX'. Note, event name is case-insensitive.
public boolean hasEventHandler(string $name)
| ||
$name | string | the event name |
{return} | boolean | whether an event has been attached one or several handlers |
public function hasEventHandler($name)
{
$name=strtolower($name);
return isset($this->_e[$name]) && $this->_e[$name]->getCount()>0;
}
Checks whether the named event has attached handlers.
public boolean hasProperty(string $name)
| ||
$name | string | the property name |
{return} | boolean | whether the property is defined |
public function hasProperty($name)
{
return method_exists($this,'get'.$name) || method_exists($this,'set'.$name);
}
Determines whether a property is defined. A property is defined if there is a getter or setter method defined in the class. Note, property names are case-insensitive.
public void raiseEvent(string $name, CEvent $event)
| ||
$name | string | the event name |
$event | CEvent | the event parameter |
public function raiseEvent($name,$event)
{
$name=strtolower($name);
if(isset($this->_e[$name]))
{
foreach($this->_e[$name] as $handler)
{
if(is_string($handler))
call_user_func($handler,$event);
elseif(is_callable($handler,true))
{
if(is_array($handler))
{
// an array: 0 - object, 1 - method name
list($object,$method)=$handler;
if(is_string($object)) // static method call
call_user_func($handler,$event);
elseif(method_exists($object,$method))
$object->$method($event);
else
throw new CException(Yii::t('yii','Event "{class}.{event}" is attached with an invalid handler "{handler}".',
array('{class}'=>get_class($this), '{event}'=>$name, '{handler}'=>$handler[1])));
}
else // PHP 5.3: anonymous function
call_user_func($handler,$event);
}
else
throw new CException(Yii::t('yii','Event "{class}.{event}" is attached with an invalid handler "{handler}".',
array('{class}'=>get_class($this), '{event}'=>$name, '{handler}'=>gettype($handler))));
// stop further handling if param.handled is set true
if(($event instanceof CEvent) && $event->handled)
return;
}
}
elseif(YII_DEBUG && !$this->hasEvent($name))
throw new CException(Yii::t('yii','Event "{class}.{event}" is not defined.',
array('{class}'=>get_class($this), '{event}'=>$name)));
}
Raises an event. This method represents the happening of an event. It invokes all attached handlers for the event.
Signup or Login in order to comment.