PHP Class Prado\TComponent
TComponent is the base class for all PRADO components.
TComponent implements the protocol of defining, using properties, behaviors,
and events.
A property is defined by a getter method, and/or a setter method.
Properties can be accessed in the way like accessing normal object members.
Reading or writing a property will cause the invocation of the corresponding
getter or setter method, e.g.,
$a=$this->Text; // equivalent to $a=$this->getText();
$this->Text='abc'; // equivalent to $this->setText('abc');
The signatures of getter and setter methods are as follows,
getter, defines a readable property 'Text'
function getText() { ... }
setter, defines a writable property 'Text', with $value being the value to be set to the property
function setText($value) { ... }
Property names are case-insensitive. It is recommended that they are written
in the format of concatenated words, with the first letter of each word
capitalized (e.g. DisplayMode, ItemStyle).
Javascript Get and Set
Since Prado 3.2 a new class of javascript-friendly properties have been introduced
to better deal with potential security problems like cross-site scripting issues.
All the data that gets sent clientside inside a javascript block is now encoded by default.
Sometimes there's the need to bypass this encoding and be able to send raw javascript code.
This new class of javascript-friendly properties are identified by their name
starting with 'js' (case insensitive):
getter, defines a readable property 'Text'
function getJsText() { ... }
setter, defines a writable property 'Text', with $value being the value to be set to the property
function setJsText(TJavaScriptLiteral $value) { ... }
Js-friendly properties can be accessed using both their Js-less name and their Js-enabled name:
set some simple text as property value
$component->Text = 'text';
set some javascript code as property value
$component->JsText = 'raw javascript';
In the first case, the property value will automatically gets encoded when sent
clientside inside a javascript block.
In the second case, the property will be 'marked' as being a safe javascript
statement and will not be encoded when rendered inside a javascript block.
This special handling makes use of the {@link TJavaScriptLiteral} class.
Events
An event is defined by the presence of a method whose name starts with 'on'.
The event name is the method name and is thus case-insensitive.
An event can be attached with one or several methods (called event handlers).
An event can be raised by calling {@link raiseEvent} method, upon which
the attached event handlers will be invoked automatically in the order they
are attached to the event. Event handlers must have the following signature,
function eventHandlerFuncName($sender,$param) { ... }
where $sender refers to the object who is responsible for the raising of the event,
and $param refers to a structure that may contain event-specific information.
To raise an event (assuming named as 'Click') of a component, use
$component->raiseEvent('OnClick');
$component->raiseEvent('OnClick', $this, $param);
To attach an event handler to an event, use one of the following ways,
$component->OnClick=$callback; // or $component->OnClick->add($callback);
$component->attachEventHandler('OnClick',$callback);
The first two ways make use of the fact that $component->OnClick refers to
the event handler list {@link TPriorityList} for the 'OnClick' event.
The variable $callback contains the definition of the event handler that can
be either a string referring to a global function name, or an array whose
first element refers to an object and second element a method name/path that
is reachable by the object, e.g.
- 'buttonClicked' : buttonClicked($sender,$param);
- array($object,'buttonClicked') : $object->buttonClicked($sender,$param);
- array($object,'MainContent.SubmitButton.buttonClicked') :
$object->MainContent->SubmitButton->buttonClicked($sender,$param);
With the addition of behaviors, a more expansive event model is needed. There
are two new event types (global and dynamic events) as well as a more comprehensive
behavior model that includes class wide behaviors.
A global event is defined by all events whose name starts with 'fx'.
The event name is potentially a method name and is thus case-insensitive. All 'fx' events
are valid as the whole 'fx' event/method space is global in nature. Any object may patch into
any global event by defining that event as a method. Global events have priorities
just like 'on' events; so as to be able to order the event execution. Due to the
nature of all events which start with 'fx' being valid, in effect, every object
has every 'fx' global event. It is simply an issue of tapping into the desired
global event.
A global event that starts with 'fx' can be called even if the object does not
implement the method of the global event. A call to a non-existing 'fx' method
will, at minimal, function and return null. If a method argument list has a first
parameter, it will be returned instead of null. This allows filtering and chaining.
'fx' methods do not automatically install and uninstall. To install and uninstall an
object's global event listeners, call the object's {@link listen} and
{@link unlisten} methods, respectively. An object may auto-install its global event
during {@link __construct} by overriding {@link getAutoGlobalListen} and returning true.
As of PHP version 5.3, nulled objects without code references will still continue to persist
in the global event queue because {@link __destruct} is not automatically called. In the common
__destruct method, if an object is listening to global events, then {@link unlisten} is called.
{@link unlisten} is required to be manually called before an object is
left without references if it is currently listening to any global events. This includes
class wide behaviors.
An object that contains a method that starts with 'fx' will have those functions
automatically receive those events of the same name after {@link listen} is called on the object.
An object may listen to a global event without defining an 'fx' method of the same name by
adding an object method to the global event list. For example
$component->fxGlobalCheck=$callback; // or $component->OnClick->add($callback);
$component->attachEventHandler('fxGlobalCheck',array($object, 'someMethod'));
Events between Objects and their behaviors, Dynamic Events
An intra-object/behavior event is defined by methods that start with 'dy'. Just as with
'fx' global events, every object has every dynamic event. Any call to a method that
starts with 'dy' will be handled, regardless of whether it is implemented. These
events are for communicating with attached behaviors.
Dynamic events can be used in a variety of ways. They can be used to tell behaviors
when a non-behavior method is called. Dynamic events could be used as data filters.
They could also be used to specify when a piece of code is to be run, eg. should the
loop process be performed on a particular piece of data. In this way, some control
is handed to the behaviors over the process and/or data.
If there are no handlers for an 'fx' or 'dy' event, it will return the first
parameter of the argument list. If there are no arguments, these events
will return null. If there are handlers an 'fx' method will be called directly
within the object. Global 'fx' events are triggered by calling {@link raiseEvent}.
For dynamic events where there are behaviors that respond to the dynamic events, a
{@link TCallChain} is developed. A call chain allows the behavior dynamic event
implementations to call further implementing behaviors within a chain.
If an object implements {@link IDynamicMethods}, all global and object dynamic
events will be sent to {@link __dycall}. In the case of global events, all
global events will trigger this method. In the case of behaviors, all undefined
dynamic events which are called will be passed through to this method.
Behaviors
There are two types of behaviors. There are individual object behaviors and
there are class wide behaviors. Class behaviors depend upon object behaviors.
When a new class implements {@link IBehavior} or {@link IClassBehavior} or
extends {@link TBehavior} or {@link TClassBehavior}, it may be added to an
object by calling the object's {@link attachBehavior}. The behaviors associated
name can then be used to {@link enableBehavior} or {@link disableBehavior}
the specific behavior.
All behaviors may be turned on and off via {@link enableBehaviors} and
{@link disableBehaviors}, respectively. To check if behaviors are on or off
a call to {@link getBehaviorsEnabled} will provide the variable.
Attaching and detaching whole sets of behaviors is done using
{@link attachBehaviors} and {@link detachBehaviors}. {@link clearBehaviors}
removes all of an object's behaviors.
{@link asa} returns a behavior of a specific name. {@link isa} is the
behavior inclusive function that acts as the PHP operator {@link instanceof}.
A behavior could provide the functionality of a specific class thus causing
the host object to act similarly to a completely different class. A behavior
would then implement {@link IInstanceCheck} to provide the identity of the
different class.
Class behaviors are similar to object behaviors except that the class behavior
is the implementation for all instances of the class. A class behavior
will have the object upon which is being called be prepended to the parameter
list. This way the object is known across the class behavior implementation.
Class behaviors are attached using {@link attachClassBehavior} and detached
using {@link detachClassBehavior}. Class behaviors are important in that
they will be applied to all new instances of a particular class. In this way
class behaviors become default behaviors to a new instances of a class in
{@link __construct}. Detaching a class behavior will remove the behavior
from the default set of behaviors created for an object when the object
is instanced.
Class behaviors are also added to all existing instances via the global 'fx'
event mechanism. When a new class behavior is added, the event
{@link fxAttachClassBehavior} is raised and all existing instances that are
listening to this global event (primarily after {@link listen} is called)
will have this new behavior attached. A similar process is used when
detaching class behaviors. Any objects listening to the global 'fx' event
{@link fxDetachClassBehavior} will have a class behavior removed.
Dynamic Intra-Object Events
Dynamic events start with 'dy'. This mechanism is used to allow objects
to communicate with their behaviors directly. The entire 'dy' event space
is valid. All attached, enabled behaviors that implement a dynamic event
are called when the host object calls the dynamic event. If there is no
implementation or behaviors, this returns null when no parameters are
supplied and will return the first parameter when there is at least one
parameter in the dynamic event.
null == $this->dyBehaviorEvent();
5 == $this->dyBehaviorEvent(5); //when no behaviors implement this dynamic event
Dynamic events can be chained together within behaviors to allow for data
filtering. Dynamic events are implemented within behaviors by defining the
event as a method.
class TObjectBehavior extends TBehavior {
public function dyBehaviorEvent($param1, $callchain) {
Do something, eg: $param1 += 13;
return $callchain->dyBehaviorEvent($param1);
}
}
This implementation of a behavior and dynamic event will flow through to the
next behavior implementing the dynamic event. The first parameter is always
return when it is supplied. Otherwise a dynamic event returns null.
In the case of a class behavior, the object is also prepended to the dynamic
event.
class TObjectClassBehavior extends TClassBehavior {
public function dyBehaviorEvent($hostobject, $param1, $callchain) {
Do something, eg: $param1 += $hostobject->getNumber();
return $callchain->dyBehaviorEvent($param1);
}
}
When calling a dynamic event, only the parameters are passed. The host object
and the call chain are built into the framework.
Global Event and Dynamic event catching
Given that all global 'fx' events and dynamic 'dy' events are valid and
operational, there is a mechanism for catching events called that are not
implemented (similar to the built-in PHP method {@link __call}). When
a dynamic or global event is called but a behavior does not implement it,
yet desires to know when an undefined dynamic event is run, the behavior
implements the interface {@link IDynamicMethods} and method {@link __dycall}.
In the case of dynamic events, {@link __dycall} is supplied with the method
name and its parameters. When a global event is raised, via {@link raiseEvent},
the method is the event name and the parameters are supplied.
When implemented, this catch-all mechanism is called for event global event event
when implemented outside of a behavior. Within a behavior, it will also be called
when the object to which the behavior is attached calls any unimplemented dynamic
event. This is the fall-back mechanism for informing a class and/or behavior
of when an global and/or undefined dynamic event is executed.
Mostrar archivo
Open project: pradosoft/prado
Class Usage Examples
Public Methods
Method |
Description |
|
__call ( $method, $args ) : mixed |
Calls a method. |
|
__construct ( ) |
The common __construct
If desired by the new object, this will auto install and listen to global event functions
as defined by the object via 'fx' methods. This also attaches any predefined behaviors. |
|
__destruct ( ) |
The common __destruct
This unlistens from the global event routines if listening |
|
__get ( $name ) : mixed |
Returns a property value or an event handler list by property or event name. |
|
__isset ( $name ) |
Checks if a property value is null, there are no events in the object
event list or global event list registered under the name, and, if
behaviors are enabled,
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. |
|
__set ( $name, $value ) |
Sets value of a component property. |
|
__sleep ( ) |
Returns an array with the names of all variables of that object that should be serialized. |
|
__unset ( $name ) |
Sets a component property to be null. Clears the object or global
events. When enabled, loops through all behaviors and unsets the
property or event. |
|
addParsedObject ( $object ) |
Processes an object that is created during parsing template. |
|
asa ( $behaviorname ) : Prado\Util\IBehavior |
Returns the named behavior object. |
|
attachBehavior ( $name, $behavior, $priority = null ) : Prado\Util\IBehavior |
Attaches a behavior to this component. |
|
attachBehaviors ( $behaviors ) |
Attaches a list of behaviors to the component. |
|
attachClassBehavior ( $name, $behavior, $class = null, $priority = null ) |
This will add a class behavior to all classes instanced (that are listening) and future newly instanced objects. |
|
attachEventHandler ( $name, $handler, $priority = null ) |
Attaches an event handler to an event. |
|
canGetProperty ( $name ) : boolean |
Determines whether a property can be read. |
|
canSetProperty ( $name ) : boolean |
Determines whether a property can be set. |
|
clearBehaviors ( ) |
Detaches all behaviors from the component. |
|
createdOnTemplate ( $parent ) |
This method is invoked after the component is instantiated by a template. |
|
detachBehavior ( $name, $priority = false ) : Prado\Util\IBehavior |
Detaches a behavior from the component. |
|
detachBehaviors ( $behaviors ) |
Detaches select behaviors from the component. |
|
detachClassBehavior ( $name, $class = null, $priority = false ) |
This will remove a behavior from a class. It unregisters it from future instances and
pulls the changes from all the instances that are listening as well. |
|
detachEventHandler ( $name, $handler, $priority = false ) : boolean |
Detaches an existing event handler. |
|
disableBehavior ( $name ) |
Disables an attached behavior. This cannot enable or disable whole class behaviors. |
|
disableBehaviors ( ) |
Disables all behaviors attached to this component independent of the behaviors |
|
enableBehavior ( $name ) |
Enables an attached object behavior. This cannot enable or disable whole class behaviors. |
|
enableBehaviors ( ) |
Enables all behaviors attached to this component independent of the behaviors |
|
evaluateExpression ( $expression ) : mixed |
Evaluates a PHP expression in the context of this control. |
|
evaluateStatements ( $statements ) : string |
Evaluates a list of PHP statements. |
|
fxAttachClassBehavior ( $sender, $param ) |
This is the method registered for all instanced objects should a class behavior be added after
the class is instanced. Only when the class to which the behavior is being added is in this
object's class hierarchy, via {@link getClassHierarchy}, is the behavior added to this instance. |
|
fxDetachClassBehavior ( $sender, $param ) |
This is the method registered for all instanced objects should a class behavior be removed after
the class is instanced. Only when the class to which the behavior is being added is in this
object's class hierarchy, via {@link getClassHierarchy}, is the behavior removed from this instance. |
|
getAutoGlobalListen ( ) : boolean |
Tells TComponent whether or not to automatically listen to global events. |
|
getBehaviorsEnabled ( ) : boolean |
Returns if all the behaviors are turned on or off for the object. |
|
getClassHierarchy ( $lowercase = false ) : array |
This returns an array of the class name and the names of all its parents. The base object first,
{@link TComponent}, and the deepest subclass is last. |
|
getEventHandlers ( $name ) : TPriorityList |
Returns the list of attached event handlers for an 'on' or 'fx' event. This function also
checks through all the behaviors for 'on' event lists when behaviors are enabled. |
|
getListeningToGlobalEvents ( ) : boolean |
Gets the state of listening to global events |
|
getSubProperty ( $path ) : mixed |
Evaluates a property path. |
|
hasEvent ( $name ) : boolean |
Determines whether an event is defined. |
|
hasEventHandler ( $name ) : boolean |
Checks if an event has any handlers. This function also checks through all
the behaviors for 'on' events when behaviors are enabled. |
|
hasProperty ( $name ) : boolean |
Determines whether a property is defined. |
|
isa ( $class ) : boolean |
Returns whether or not the object or any of the behaviors are of a particular class. |
|
listen ( ) : numeric |
This adds an object's fx event handlers into the global broadcaster to listen into any
broadcast global events called through {@link raiseEvent} |
|
raiseEvent ( $name, $sender, $param, $responsetype = null, $postfunction = null ) : mixed |
Raises an event. This raises both inter-object 'on' events and global 'fx' events. |
|
setSubProperty ( $path, $value ) |
Sets a value to a property path. |
|
unlisten ( ) : numeric |
this removes an object's fx events from the global broadcaster |
|
Protected Methods
Method |
Description |
|
_getZappableSleepProps ( &$exprops ) |
Returns an array with the names of all variables of this object that should NOT be serialized
because their value is the default one or useless to be cached for the next page loads. |
|
Private Methods
Method |
Description |
|
filter_prado_fx ( $name ) |
This utility function is a private array filter method. The array values
that start with 'fx' are filtered in. |
|
Method Details
Do not call this method directly. This is a PHP magic method that we override
to allow behaviors, dynamic events (intra-object/behavior events),
undefined dynamic and global events, and
to allow using the following syntax to call a property setter or getter.
$this->getPropertyName($value); // if there's a $this->getjsPropertyName() method
$this->setPropertyName($value); // if there's a $this->setjsPropertyName() method
Additional object behaviors override class behaviors.
dynamic and global events do not fail even if they aren't implemented.
Any intra-object/behavior dynamic events that are not implemented by the behavior
return the first function paramater or null when no parameters are specified.
public __call ( $method, $args ) : mixed |
return |
mixed |
result of the method call, or false if 'fx' or 'dy' function but
is not found in the class, otherwise it runs |
__construct()
public method
This function installs all class behaviors in a class hierarchy from the deepest subclass
through each parent to the top most class, TComponent.
__destruct()
public method
PHP 5.3 does not __destruct objects when they are nulled and thus unlisten must be
called must be explicitly called.
Do not call this method. This is a PHP magic method that we override
to allow using the following syntax to read a property:
$value=$component->PropertyName;
$value=$component->jsPropertyName; // return JavaScript literal
and to obtain the event handler list for an event,
$eventHandlerList=$component->EventName;
This will also return the global event handler list when specifing an 'fx'
event,
$globalEventHandlerList=$component->fxEventName;
When behaviors are enabled, this will return the behavior of a specific
name, a property of a behavior, or an object 'on' event defined by the behavior.
public __get ( $name ) : mixed |
return |
mixed |
the property value or the event handler list as {@link TPriorityList} |
This also works for global events. When behaviors are enabled, it
will check for a behavior of the specified name, and also check
the behavior for events and properties.
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->jsPropertyName=$value; // $value will be treated as a JavaScript literal
$this->EventName=$handler;
$this->fxEventName=$handler; //global event listener
When behaviors are enabled, this will also set a behaviors properties and events.
public __set ( $name, $value ) |
Do not call this method. This is a PHP magic method that will be called automatically
prior to any serialization.
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.
_getZappableSleepProps()
protected method
Reimplement in derived classes to add new variables, but remember to also to call the parent
implementation first.
addParsedObject()
public method
The object can be either a component or a static text string.
This method can be overridden to customize the handling of newly created objects in template.
Only framework developers and control developers should use this method.
Behaviors may implement the function:
public function dyAddParsedObject($object[, $chain]) {
}
to be executed when addParsedObject is called. All attached behaviors are notified through
dyAddParsedObject.
The name 'asa' stands for 'as a'.
public asa ( $behaviorname ) : Prado\Util\IBehavior |
return |
Prado\Util\IBehavior |
the behavior object, or null if the behavior does not exist |
attachBehavior()
public method
This method will create the behavior object based on the given
configuration. After that, the behavior object will be initialized
by calling its {@link IBehavior::attach} method.
Already attached behaviors may implement the function:
public function dyAttachBehavior($name,$behavior[, $chain]) {
}
to be executed when attachBehavior is called. All attached behaviors are notified through
dyAttachBehavior.
public attachBehavior ( $name, $behavior, $priority = null ) : Prado\Util\IBehavior |
return |
Prado\Util\IBehavior |
the behavior object |
attachBehaviors()
public method
Each behavior is indexed by its name and should be an instance of
{@link IBehavior}, a string specifying the behavior class, or a
{@link TClassBehaviorEventParameter}.
attachClassBehavior()
public static method
This registers the behavior for future instances and pushes the changes to all the instances that are listening as well.
The universal class behaviors are stored in an inverted stack with the latest class behavior being at the first position in the array.
This is done so class behaviors are added last first.
attachEventHandler()
public method
The 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. In Prado, you can also use method path to refer to
an event handler. For example, array($object,'Parent.buttonClicked')
uses a method path that refers to the method $object->Parent->buttonClicked(...).
The event handler must be of the following signature,
function handlerName($sender, $param) }
function handlerName($sender, $param, $name) }
where $sender represents the object that raises the event,
and $param is the event parameter. $name refers to the event name
being handled.
This is a convenient method to add an event handler.
It is equivalent to {@link getEventHandlers}($name)->add($handler).
For complete management of event handlers, use {@link getEventHandlers}
to get the event handler list first, and then do various
{@link TPriorityList} operations to append, insert or remove
event handlers. You may also do these operations like
getting and setting properties, e.g.,
$component->OnClick[]=array($object,'buttonClicked');
$component->OnClick->insertAt(0,array($object,'buttonClicked'));
which are equivalent to the following
$component->getEventHandlers('OnClick')->add(array($object,'buttonClicked'));
$component->getEventHandlers('OnClick')->insertAt(0,array($object,'buttonClicked'));
Due to the nature of {@link getEventHandlers}, any active behaviors defining
new 'on' events, this method will pass through to the behavior transparently.
canGetProperty()
public method
A property can be read if the class has a getter method
for the property name. Note, property name is case-insensitive.
This also checks for getjs. When enabled, it loops through all
active behaviors for the get property when undefined by the object.
canSetProperty()
public method
A property can be written if the class has a setter method
for the property name. Note, property name is case-insensitive.
This also checks for setjs. When enabled, it loops through all
active behaviors for the set property when undefined by the object.
clearBehaviors()
public method
Detaches all behaviors from the component.
createdOnTemplate()
public method
When this method is invoked, the component's properties have been initialized.
The default implementation of this method will invoke
the potential parent component's {@link addParsedObject}.
This method can be overridden.
Behaviors may implement the function:
public function dyCreatedOnTemplate($parent, $chain) {
return $chain->dyCreatedOnTemplate($parent); //example
}
to be executed when createdOnTemplate is called. All attached behaviors are notified through
dyCreatedOnTemplate.
detachBehavior()
public method
The behavior's {@link IBehavior::detach} method will be invoked.
Behaviors may implement the function:
public function dyDetachBehavior($name,$behavior[, $chain]) {
}
to be executed when detachBehavior is called. All attached behaviors are notified through
dyDetachBehavior.
public detachBehavior ( $name, $priority = false ) : Prado\Util\IBehavior |
return |
Prado\Util\IBehavior |
the detached behavior. Null if the behavior does not exist. |
detachBehaviors()
public method
Each behavior is indexed by its name and should be an instance of
{@link IBehavior}, a string specifying the behavior class, or a
{@link TClassBehaviorEventParameter}.
detachClassBehavior()
public static method
PHP 5.3 uses Late Static Binding to derive the static class upon which this method is called.
public static detachClassBehavior ( $name, $class = null, $priority = false ) |
$name |
|
the key of the class behavior |
$class |
|
string class on which to attach this behavior. Defaults to null. |
$priority |
|
numeric|null|false priority. false is any priority, null is default
{@link TPriorityList} priority, and numeric is a specific priority. |
detachEventHandler()
public method
This method is the opposite of {@link attachEventHandler}. It will detach
any 'on' events definedb by an objects active behaviors as well.
disableBehavior()
public method
A behavior is only effective when it is enabled.
Behaviors may implement the function:
public function dyDisableBehavior($name,$behavior[, $chain]) {
}
to be executed when disableBehavior is called. All attached behaviors are notified through
dyDisableBehavior.
disableBehaviors()
public method
Behaviors may implement the function:
public function dyDisableBehaviors($name,$behavior[, $chain]) {
}
to be executed when disableBehaviors is called. All attached behaviors are notified through
dyDisableBehaviors.
enableBehavior()
public method
A behavior is only effective when it is enabled.
A behavior is enabled when first attached.
Behaviors may implement the function:
public function dyEnableBehavior($name,$behavior[, $chain]) {
}
to be executed when enableBehavior is called. All attached behaviors are notified through
dyEnableBehavior.
enableBehaviors()
public method
Behaviors may implement the function:
public function dyEnableBehaviors($name,$behavior[, $chain]) {
}
to be executed when enableBehaviors is called. All attached behaviors are notified through
dyEnableBehaviors.
evaluateExpression()
public method
Behaviors may implement the function:
public function dyEvaluateExpressionFilter($expression, $chain) {
return $chain->dyEvaluateExpressionFilter(str_replace('foo', 'bar', $expression)); //example
}
to be executed when evaluateExpression is called. All attached behaviors are notified through
dyEvaluateExpressionFilter. The chaining is important in this function due to the filtering
pass-through effect.
evaluateStatements()
public method
Behaviors may implement the function:
public function dyEvaluateStatementsFilter($statements, $chain) {
return $chain->dyEvaluateStatementsFilter(str_replace('foo', 'bar', $statements)); //example
}
to be executed when evaluateStatements is called. All attached behaviors are notified through
dyEvaluateStatementsFilter. The chaining is important in this function due to the filtering
pass-through effect.
fxAttachClassBehavior()
public method
This is the method registered for all instanced objects should a class behavior be added after
the class is instanced. Only when the class to which the behavior is being added is in this
object's class hierarchy, via {@link getClassHierarchy}, is the behavior added to this instance.
public fxAttachClassBehavior ( $sender, $param ) |
$sender |
|
the application |
$param |
|
TClassBehaviorEventParameter |
fxDetachClassBehavior()
public method
This is the method registered for all instanced objects should a class behavior be removed after
the class is instanced. Only when the class to which the behavior is being added is in this
object's class hierarchy, via {@link getClassHierarchy}, is the behavior removed from this instance.
public fxDetachClassBehavior ( $sender, $param ) |
$sender |
|
the application |
$param |
|
TClassBehaviorEventParameter |
getAutoGlobalListen()
public method
Defaults to false because PHP variable cleanup is affected if this is true.
When unsetting a variable that is listening to global events, {@link unlisten}
must explicitly be called when cleaning variables allocation or else the global
event registry will contain references to the old object. This is true for PHP 5.4
Override this method by a subclass to change the setting. When set to true, this
will enable {@link __construct} to call {@link listen}.
getBehaviorsEnabled()
public method
Returns if all the behaviors are turned on or off for the object.
getClassHierarchy()
public method
This returns an array of the class name and the names of all its parents. The base object first,
{@link TComponent}, and the deepest subclass is last.
getEventHandlers()
public method
Returns the list of attached event handlers for an 'on' or 'fx' event. This function also
checks through all the behaviors for 'on' event lists when behaviors are enabled.
public getEventHandlers ( $name ) : TPriorityList |
return |
Prado\Collections\TPriorityList |
list of attached event handlers for an event |
getListeningToGlobalEvents()
public method
Gets the state of listening to global events
getSubProperty()
public method
A property path is a sequence of property names concatenated by '.' character.
For example, 'Parent.Page' refers to the 'Page' property of the component's
'Parent' property value (which should be a component also).
When a property is not defined by an object, this also loops through all
active behaviors of the object.
An event is defined if the class has a method whose name is the event name
prefixed with 'on', 'fx', or 'dy'.
Every object responds to every 'fx' and 'dy' event as they are in a universally
accepted event space. 'on' event must be declared by the object.
When enabled, this will loop through all active behaviors for 'on' events
defined by the behavior.
Note, event name is case-insensitive.
hasEventHandler()
public method
'dy' dynamic events are not handled by this function.
hasProperty()
public method
A property is defined if there is a getter or setter method
defined in the class. Note, property names are case-insensitive.
The name 'isa' stands for 'is a'. This first checks if $this is an instanceof the class.
It then checks each Behavior. If a behavior implements {@link IInstanceCheck},
then the behavior can determine what it is an instanceof. If this behavior function returns true,
then this method returns true. If the behavior instance checking function returns false,
then no further checking is performed as it is assumed to be correct.
If the behavior instance check function returns nothing or null or the behavior
doesn't implement the {@link IInstanceCheck} interface, then the default instanceof occurs.
The default isa behavior is to check if the behavior is an instanceof the class.
The behavior {@link IInstanceCheck} is to allow a behavior to have the host object
act as a completely different object.
public isa ( $class ) : boolean |
return |
boolean |
whether or not the object or a behavior is an instance of a particular class |
Behaviors may implement the function:
public function dyListen($globalEvents[, $chain]) {
$this->listen(); //eg
}
to be executed when listen is called. All attached behaviors are notified through dyListen.
public listen ( ) : numeric |
return |
numeric |
the number of global events that were registered to the global event registry |
raiseEvent()
public method
This method represents the happening of an event and will
invoke all attached event handlers for the event in {@link TPriorityList} order.
This method does not handle intra-object/behavior dynamic 'dy' events.
There are ways to handle event responses. By defailt {@link EVENT_RESULT_FILTER},
all event responses are stored in an array, filtered for null responses, and returned.
If {@link EVENT_RESULT_ALL} is specified, all returned results will be stored along
with the sender and param in an array
$result[] = array('sender'=>$sender,'param'=>$param,'response'=>$response);
If {@link EVENT_RESULT_FEED_FORWARD} is specified, then each handler result is then
fed forward as the parameters for the next event. This allows for events to filter data
directly by affecting the event parameters
If a callable function is set in the response type or the post function filter is specified then the
result of each called event handler is post processed by the callable function. Used in
combination with {@link EVENT_RESULT_FEED_FORWARD}, any event (and its result) can be chained.
When raising a global 'fx' event, registered handlers in the global event list for
{@link GLOBAL_RAISE_EVENT_LISTENER} are always added into the set of event handlers. In this way,
these global events are always raised for every global 'fx' event. The registered handlers for global
raiseEvent events have priorities. Any registered global raiseEvent event handlers with a priority less than zero
are added before the main event handlers being raised and any registered global raiseEvent event handlers
with a priority equal or greater than zero are added after the main event handlers being raised. In this way
all {@link GLOBAL_RAISE_EVENT_LISTENER} handlers are always called for every raised 'fx' event.
Behaviors may implement the following functions:
public function dyPreRaiseEvent($name,$sender,$param,$responsetype,$postfunction[, $chain]) {
return $name; //eg, the event name may be filtered/changed
}
public function dyIntraRaiseEventTestHandler($handler,$sender,$param,$name[, $chain]) {
return true; //should this particular handler be executed? true/false
}
public function dyIntraRaiseEventPostHandler($name,$sender,$param,$handler,$response[, $chain]) {
contains the per handler response
}
public function dyPostRaiseEvent($responses,$name,$sender,$param,$responsetype,$postfunction[, $chain]) {
return $responses;
}
to be executed when raiseEvent is called. The 'intra' dynamic events are called per handler in
the handler loop.
dyPreRaiseEvent has the effect of being able to change the event being raised. This intra
object/behavior event returns the name of the desired event to be raised. It will pass through
if no dynamic event is specified, or if the original event name is returned.
dyIntraRaiseEventTestHandler returns true or false as to whether a specific handler should be
called for a specific raised event (and associated event arguments)
dyIntraRaiseEventPostHandler does not return anything. This allows behaviors to access the results
of an event handler in the per handler loop.
dyPostRaiseEvent returns the responses. This allows for any post processing of the event
results from the sum of all event handlers
When handling a catch-all {@link __dycall}, the method name is the name of the event
and the parameters are the sender, the param, and then the name of the event.
public raiseEvent ( $name, $sender, $param, $responsetype = null, $postfunction = null ) : mixed |
return |
mixed |
the results of the event |
setSubProperty()
public method
A property path is a sequence of property names concatenated by '.' character.
For example, 'Parent.Page' refers to the 'Page' property of the component's
'Parent' property value (which should be a component also).
When a property is not defined by an object, this also loops through all
active behaviors of the object.
Behaviors may implement the function:
public function dyUnlisten($globalEvents[, $chain]) {
$this->behaviorUnlisten(); //eg
}
to be executed when listen is called. All attached behaviors are notified through dyUnlisten.
public unlisten ( ) : numeric |
return |
numeric |
the number of global events that were unregistered from the global event registry |