Commit 7a556406 by Carsten Brandt

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/
parent f83fcc55
...@@ -299,6 +299,32 @@ class Component extends Object ...@@ -299,6 +299,32 @@ class Component extends Object
} }
/** /**
* 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.
* *
* Child classes may override this method to specify the behaviors they want to behave as. * Child classes may override this method to specify the behaviors they want to behave as.
......
...@@ -220,6 +220,19 @@ class Object implements Arrayable ...@@ -220,6 +220,19 @@ class Object implements Arrayable
} }
/** /**
* 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.
* @return array the array representation of the object * @return array the array representation of the object
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment