/** * Call to undefined method. * @param object * @param string method name * @param array arguments * @return mixed * @throws MemberAccessException */ public static function call($_this, $name, $args) { $class = new Reflection\ClassType($_this); if ($name === '') { throw new MemberAccessException("Call to class '$class->name' method without name."); } // event functionality if ($class->hasEventProperty($name)) { if (is_array($list = $_this->$name) || $list instanceof \Traversable) { foreach ($list as $handler) { callback($handler)->invokeArgs($args); } } return NULL; } // extension methods if ($cb = $class->getExtensionMethod($name)) { array_unshift($args, $_this); return $cb->invokeArgs($args); } throw new MemberAccessException("Call to undefined method $class->name::$name()."); }
static function call($_this, $name, $args) { $class = new Reflection\ClassType($_this); if ($name === '') { throw new MemberAccessException("Call to class '{$class->name}' method without name."); } if ($class->hasEventProperty($name)) { if (is_array($list = $_this->{$name}) || $list instanceof \Traversable) { foreach ($list as $handler) { callback($handler)->invokeArgs($args); } } elseif ($list !== NULL) { throw new UnexpectedValueException("Property {$class->name}::\${$name} must be array or NULL, " . gettype($list) . " given."); } return NULL; } if ($cb = $class->getExtensionMethod($name)) { array_unshift($args, $_this); return $cb->invokeArgs($args); } throw new MemberAccessException("Call to undefined method {$class->name}::{$name}()."); }