Browse Source

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/
tags/2.0.0-beta
Carsten Brandt 11 years ago
parent
commit
7a55640670
  1. 26
      framework/yii/base/Component.php
  2. 13
      framework/yii/base/Object.php

26
framework/yii/base/Component.php

@ -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.
*
* Child classes may override this method to specify the behaviors they want to behave as.

13
framework/yii/base/Object.php

@ -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.
* The default implementation will return all public property values as an array.
* @return array the array representation of the object

Loading…
Cancel
Save