mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-13 20:59:12 +08:00
Added hasMethod() to Component and Object class
this allows implementing __call() in behaviors See this forum topic for details: http://www.yiiframework.com/forum/index.php/topic/46629-invoke-behavior-method-through-php-magic-method-call-dosent-work/
This commit is contained in:
@@ -298,6 +298,32 @@ class Component extends Object
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a value indicating whether a method is defined.
|
||||
* A method is defined if:
|
||||
*
|
||||
* - the class has a method with the specified name
|
||||
* - an attached behavior has a method with the given name (when `$checkBehaviors` is true).
|
||||
*
|
||||
* @param string $name the property name
|
||||
* @param boolean $checkBehaviors whether to treat behaviors' methods as methods of this component
|
||||
* @return boolean whether the property is defined
|
||||
*/
|
||||
public function hasMethod($name, $checkBehaviors = true)
|
||||
{
|
||||
if (method_exists($this, $name)) {
|
||||
return true;
|
||||
} elseif ($checkBehaviors) {
|
||||
$this->ensureBehaviors();
|
||||
foreach ($this->_behaviors as $behavior) {
|
||||
if ($behavior->hasMethod($name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of behaviors that this component should behave as.
|
||||
*
|
||||
|
||||
@@ -219,6 +219,19 @@ class Object implements Arrayable
|
||||
return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a value indicating whether a method is defined.
|
||||
*
|
||||
* The default implementation is a call to php function `method_exists()`.
|
||||
* You may override this method when you implemented the php magic method `__call()`.
|
||||
* @param string $name the property name
|
||||
* @return boolean whether the property is defined
|
||||
*/
|
||||
public function hasMethod($name)
|
||||
{
|
||||
return method_exists($this, $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the object into an array.
|
||||
* The default implementation will return all public property values as an array.
|
||||
|
||||
Reference in New Issue
Block a user