mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-13 12:49:04 +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;
|
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.
|
* 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);
|
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.
|
* Converts the object into an array.
|
||||||
* The default implementation will return all public property values as an array.
|
* The default implementation will return all public property values as an array.
|
||||||
|
|||||||
Reference in New Issue
Block a user