Spec-Zone.ru › Yii 1.1

CComponent

Пакет system.base
Наследование class CComponent
Подклассы 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
С тех пор 1.0
Исходный код framework/base/CComponent.php
CComponent — базовый класс для всех компонентов.

CComponent реализует протокол определения, использования свойств и событий.

Свойство определяется методом-геттером и/или методом-сеттером. К свойствам можно обращаться так же, как к обычным членам объекта. Чтение или запись свойства вызовет вызов соответствующего метода-геттера или метода-сеттера, например
$a=$component->text;     // equivalent to $a=$component->getText();
$component->text='abc';  // equivalent to $component->setText('abc');
Подписи методов-геттера и метода-сеттера следующие,
// 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) { ... }


Событие определяется наличием метода, имя которого начинается с 'on'. Имя события — имя метода. Когда поднимается событие, к нему будут автоматически вызваны функции (так называемые обработчики событий) в порядке их подключения к событию. Обработчики событий должны иметь следующий формат,
function eventHandler($event) { ... }
где $event содержит параметры, связанные с событием.

Чтобы подключить обработчик событий к событию, см. attachEventHandler. Также можно использовать следующий синтаксис:
$component->onClick=$callback;    // or $component->onClick->add($callback);
где $callback относится к допустимому PHP-обработчику. Ниже приведены примеры обработчиков:
'handleOnClick'                   // handleOnClick() is a global function
array($object,'handleOnClick')    // using $object->handleOnClick()
array('Page','handleOnClick')     // using Page::handleOnClick()


Для поднятия события используйте raiseEvent. Метод on, определяющий событие, обычно записывается следующим образом:
public function onClick($event)
{
    $this->raiseEvent('onClick',$event);
}
где $event — экземпляр CEvent или его дочернего класса. Затем можно вызвать событие, вызвав метод on, вместо прямого вызова raiseEvent.

Имена свойств и событий регистронезависимы.

CComponent поддерживает поведения. Поведение — экземпляр IBehavior, подключенный к компоненту. К методам поведения можно обращаться так, как будто они принадлежат компоненту. К одному и тому же компоненту можно подключить несколько поведений.

Чтобы подключить поведение к компоненту, вызовите attachBehavior; чтобы отключить поведение от компонента, вызовите detachBehavior.

Поведение можно временно включить или выключить, вызвав соответственно enableBehavior или disableBehavior. При отключении методы поведения не могут быть вызваны через компонент.

Начиная с версии 1.1.0, к свойствам поведения (будь то его общедоступные переменные-члены или свойства, определенные с помощью геттеров и/или сеттеров) можно получить доступ через компонент, к которому оно подключено.

Публичные методы

Метод Описание Определено
__call() Вызывает именованный метод, который не является методом класса. CComponent
__get() Возвращает значение свойства, список обработчиков событий или поведение по его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в null. CComponent
asa() Возвращает объект поведения с заданным именем. CComponent
attachBehavior() Подключает поведение к этому компоненту. CComponent
attachBehaviors() Подключает список поведений к компоненту. CComponent
attachEventHandler() Подключает обработчик событий к событию. CComponent
canGetProperty() Определяет, можно ли считать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
detachBehavior() Отключает поведение от компонента. CComponent
detachBehaviors() Отключает все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает подключенное поведение. CComponent
disableBehaviors() Отключает все подключенные к этому компоненту поведения. CComponent
enableBehavior() Включает подключенное поведение. CComponent
enableBehaviors() Включает все подключенные к этому компоненту поведения. CComponent
evaluateExpression() Вычисляет PHP-выражение или обработчик в контексте этого компонента. CComponent
getEventHandlers() Возвращает список подключенных обработчиков событий для события. CComponent
hasEvent() Определяет, задано ли событие. CComponent
hasEventHandler() Проверяет, есть ли прикрепленные обработчики к событию с данным именем. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
raiseEvent() Поднимает событие. CComponent

Подробности методов

__call() метод

public mixed __call(string $name, array $parameters)
$name string имя метода
$parameters array параметры метода
{return} mixed значение возврата метода
Исходный код: framework/base/CComponent.php#254 (показать)
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)));
}

Вызывает именованный метод, который не является методом класса. Не вызывайте этот метод. Это магический PHP-метод, который мы переопределяем для реализации функции поведения.

__get() метод

public mixed __get(string $name)
$name string имя свойства или имя события
{return} mixed значение свойства, обработчики событий, подключенные к событию, или поведение с заданным именем
Исходный код: framework/base/CComponent.php#107 (показать)
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)));
}

Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. Не вызывать этот метод. Это магический метод PHP, который мы переопределяем, чтобы разрешить использование следующего синтаксиса для чтения свойства или получения обработчиков событий:

$value=$component->propertyName;
$handlers=$component->eventName;

См. также

  • __set

__isset() метод

public boolean __isset(string $name)
$name string имя свойства или имя события
{return} boolean
Исходный код: framework/base/CComponent.php#184 (показать)
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;
}

Проверяет, является ли значение свойства null. Не вызывать этот метод. Это магический метод PHP, который мы переопределяем, чтобы разрешить использование isset() для определения, установлено ли свойство компонента или нет.

__set() метод

public mixed __set(string $name, mixed $value)
$name string имя свойства или имя события
$value mixed значение свойства или обратный вызов
{return} mixed
Исходный код: framework/base/CComponent.php#148 (показать)
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)));
}

Устанавливает значение свойства компонента. Не вызывать этот метод. Это магический метод PHP, который мы переопределяем, чтобы разрешить использование следующего синтаксиса для установки свойства или добавления обработчика событий

$this->propertyName=$value;
$this->eventName=$callback;

См. также

  • __get

__unset() метод

public mixed __unset(string $name)
$name string имя свойства или имя события
{return} mixed
Исходный код: framework/base/CComponent.php#215 (показать)
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)));
}

Устанавливает свойство компонента в значение null. Не вызывать этот метод. Это магический метод PHP, который мы переопределяем, чтобы разрешить использование unset() для установки свойства компонента в null.

asa() метод

public IBehavior asa(string $behavior)
$behavior string имя поведения
{return} IBehavior объект поведения или null, если поведения не существует
Исходный код: framework/base/CComponent.php#276 (показать)
public function asa($behavior)
{
    return isset(
$this->_m[$behavior]) ? $this->_m[$behavior] : null;
}

Возвращает объект поведения с заданным именем. Имя 'asa' означает 'как'.

attachBehavior() метод

public IBehavior attachBehavior(string $name, mixed $behavior)
$name string имя поведения. Оно должно однозначно идентифицировать это поведение.
$behavior mixed конфигурация поведения. Передается как первый параметр в YiiBase::createComponent для создания объекта поведения. Также можно передать уже созданный экземпляр поведения (новое поведение заменит уже созданное поведение с тем же именем, если оно существует).
{return} IBehavior объект поведения
Исходный код: framework/base/CComponent.php#326 (показать)
public function attachBehavior($name,$behavior)
{
    if(!(
$behavior instanceof IBehavior))
        
$behavior=Yii::createComponent($behavior);
    
$behavior->setEnabled(true);
    
$behavior->attach($this);
    return 
$this->_m[$name]=$behavior;
}

Прикрепляет поведение к этому компоненту. Этот метод создаст объект поведения на основе заданной конфигурации. После этого объект поведения будет инициализирован вызовом его метода IBehavior::attach.

attachBehaviors() метод

public void attachBehaviors(array $behaviors)
$behaviors array список поведений, которые должны быть присоединены к компоненту
Исходный код: framework/base/CComponent.php#295 (показать)
public function attachBehaviors($behaviors)
{
    foreach(
$behaviors as $name=>$behavior)
        
$this->attachBehavior($name,$behavior);
}

Прикрепляет список поведений к компоненту. Каждое поведение индексируется по его имени и должно быть экземпляром IBehavior, строкой, задающей класс поведения, или массивом следующей структуры:

array(
    'class'=>'path.to.BehaviorClass',
    'property1'=>'value1',
    'property2'=>'value2',
)

attachEventHandler() метод

public void attachEventHandler(string $name, callback $handler)
$name string имя события
$handler callback обработчик события
Исходный код: framework/base/CComponent.php#514 (показать)
public function attachEventHandler($name,$handler)
{
    
$this->getEventHandlers($name)->add($handler);
}

Прикрепляет обработчик события к событию.

Обработчик события должен быть допустимым PHP обратным вызовом, т.е., строкой, ссылающейся на имя глобальной функции, или массивом, содержащим два элемента, где первый элемент — объект, а второй — имя метода объекта.

Обработчик события должен быть определен со следующим сигнатуро,

function handlerName($event) {}
где $event включает параметры, связанные с событием.

Это удобный метод прикрепления обработчика к событию. Он эквивалентен следующему коду:
$component->getEventHandlers($eventName)->add($eventHandler);


Используя getEventHandlers, можно также указать порядок выполнения нескольких обработчиков, прикрепленных к одному событию. Например:
$component->getEventHandlers($eventName)->insertAt(0,$eventHandler);
заставляет обработчик вызываться первым.

См. также

  • detachEventHandler

canGetProperty() метод

public boolean canGetProperty(string $name)
$name string имя свойства
{return} boolean можно ли прочитать свойство
Исходный код: framework/base/CComponent.php#421 (показать)
public function canGetProperty($name)
{
    return 
method_exists($this,'get'.$name);
}

Определяет, можно ли прочитать свойство. Свойство можно прочитать, если у класса есть метод-геттер для имени свойства. Обратите внимание, что имя свойства нечувствительно к регистру.

См. также

  • canSetProperty

canSetProperty() метод

public boolean canSetProperty(string $name)
$name string имя свойства
{return} boolean можно ли записать свойство
Исходный код: framework/base/CComponent.php#434 (показать)
public function canSetProperty($name)
{
    return 
method_exists($this,'set'.$name);
}

Определяет, можно ли установить свойство. Свойство можно записать, если у класса есть метод-сеттер для имени свойства. Обратите внимание, что имя свойства нечувствительно к регистру.

См. также

  • canGetProperty

detachBehavior() метод

public IBehavior detachBehavior(string $name)
$name string имя поведения. Оно однозначно идентифицирует поведение.
{return} IBehavior открепленное поведение. Null, если поведение не существует.
Исходный код: framework/base/CComponent.php#341 (показать)
public function detachBehavior($name)
{
    if(isset(
$this->_m[$name]))
    {
        
$this->_m[$name]->detach($this);
        
$behavior=$this->_m[$name];
        unset(
$this->_m[$name]);
        return 
$behavior;
    }
}

Отсоединяет поведение от компонента. Будет вызван метод IBehavior::detach поведения.

detachBehaviors() метод

public void detachBehaviors()
Исходный код: framework/base/CComponent.php#304 (показать)
public function detachBehaviors()
{
    if(
$this->_m!==null)
    {
        foreach(
$this->_m as $name=>$behavior)
            
$this->detachBehavior($name);
        
$this->_m=null;
    }
}

Отсоединяет все обработчики событий от компонента.

detachEventHandler() метод

public boolean detachEventHandler(string $name, callback $handler)
$name string имя события
$handler callback обработчик события, который нужно удалить
{return} boolean успех или неудача процесса отсоединения
Исходный код: framework/base/CComponent.php#527 (показать)
public function detachEventHandler($name,$handler)
{
    if(
$this->hasEventHandler($name))
        return 
$this->getEventHandlers($name)->remove($handler)!==false;
    else
        return 
false;
}

Отсоединяет существующий обработчик события. Этот метод является обратным attachEventHandler.

См. также

  • attachEventHandler

disableBehavior() метод

public void disableBehavior(string $name)
$name string имя поведения. Оно уникально идентифицирует поведение.
Исходный код: framework/base/CComponent.php#393 (показать)
public function disableBehavior($name)
{
    if(isset(
$this->_m[$name]))
        
$this->_m[$name]->setEnabled(false);
}

Отключает прикрепленное поведение. Поведение эффективно только при включенном состоянии.

disableBehaviors() метод

public void disableBehaviors()
Исходный код: framework/base/CComponent.php#367 (показать)
public function disableBehaviors()
{
    if(
$this->_m!==null)
    {
        foreach(
$this->_m as $behavior)
            
$behavior->setEnabled(false);
    }
}

Отключает все прикрепленные к этому компоненту поведения.

enableBehavior() метод

public void enableBehavior(string $name)
$name string имя поведения. Оно уникально идентифицирует поведение.
Исходный код: framework/base/CComponent.php#382 (показать)
public function enableBehavior($name)
{
    if(isset(
$this->_m[$name]))
        
$this->_m[$name]->setEnabled(true);
}

Включает прикрепленное поведение. Поведение эффективно только при включенном состоянии. Поведение включается при первом присоединении.

enableBehaviors() метод

public void enableBehaviors()
Исходный код: framework/base/CComponent.php#355 (показать)
public function enableBehaviors()
{
    if(
$this->_m!==null)
    {
        foreach(
$this->_m as $behavior)
            
$behavior->setEnabled(true);
    }
}

Включает все поведения, прикреплённые к этому компоненту.

evaluateExpression() метод (доступен с версии v1.1.0)

public mixed evaluateExpression(mixed $_expression_, array $_data_=array ( ))
$_expression_ mixed PHP-выражение или PHP-обработчик для вычисления.
$_data_ array дополнительные параметры, которые должны быть переданы вышеуказанному выражению/обработчику.
{return} mixed результат выражения
Исходный код: framework/base/CComponent.php#607 (показать)
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_, $_data_);
    }
}

Вычисляет PHP-выражение или обратный вызов в контексте этого компонента.

Допустимый PHP обратный вызов может быть именем метода класса в формате array(ClassName/Object, MethodName), или анонимной функцией (доступно только в PHP 5.3.0 и выше).

Если используется PHP обратный вызов, соответствующая сигнатура функции/метода должна быть

function foo($param1, $param2, ..., $component) { ... }
где элементы массива во втором параметре этого метода будут переданы в обратный вызов как $param1, $param2, ...; и последний параметр будет сам компонент.

Если используется PHP выражение, второй параметр будет «извлечен» в PHP переменные, которые могут быть напрямую доступны в выражении. См. PHP extract для получения более подробной информации. В выражении объект компонента может быть доступен с помощью $this.

PHP-выражение может быть любым PHP-кодом, который имеет значение. Чтобы узнать больше о том, что такое выражение, пожалуйста, обратитесь к руководству PHP.

getEventHandlers() метод

public CList getEventHandlers(string $name)
$name string имя события
{return} CList список присоединённых обработчиков событий для события
Исходный код: framework/base/CComponent.php#468 (показать)
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)));
}

Возвращает список присоединённых обработчиков событий для события.

hasEvent() метод

public boolean hasEvent(string $name)
$name string имя события
{return} boolean определено ли событие
Исходный код: framework/base/CComponent.php#446 (показать)
public function hasEvent($name)
{
    return !
strncasecmp($name,'on',2) && method_exists($this,$name);
}

Определяет, определено ли событие. Событие определено, если в классе есть метод с именем, подобным 'onXXX'. Обратите внимание, что имя события регистронезависимо.

hasEventHandler() метод

public boolean hasEventHandler(string $name)
$name string имя события
{return} boolean есть ли для события один или несколько обработчиков
Исходный код: framework/base/CComponent.php#456 (показать)
public function hasEventHandler($name)
{
    
$name=strtolower($name);
    return isset(
$this->_e[$name]) && $this->_e[$name]->getCount()>0;
}

Проверяет, есть ли для указанного события прикрепленные обработчики.

hasProperty() метод

public boolean hasProperty(string $name)
$name string имя свойства
{return} boolean определено ли свойство
Исходный код: framework/base/CComponent.php#408 (показать)
public function hasProperty($name)
{
    return 
method_exists($this,'get'.$name) || method_exists($this,'set'.$name);
}

Определяет, определено ли свойство. Свойство определено, если в классе определён метод получения или установки значения свойства. Обратите внимание, что имена свойств регистронезависимы.

См. также

  • canGetProperty
  • canSetProperty

raiseEvent() метод

public void raiseEvent(string $name, CEvent $event)
$name string имя события
$event CEvent параметр события
Исходный код: framework/base/CComponent.php#543 (показать)
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)));
}

Возбуждает событие. Этот метод представляет собой возникновение события. Он вызывает все присоединённые обработчики для события.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CComponent

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API