2015-11-07 */ class PhalApi_Request_Formatter_Callable extends PhalApi_Request_Formatter_Base implements PhalApi_Request_Formatter { /** * 对回调类型进行格式化 * * @param mixed $value 变量值 * @param array $rule array('callback' => '回调函数', 'params' => '第三个参数') * @return boolean/string 格式化后的变量 * */ public function parse($value, $rule) { $callback = isset($rule['callback']) ? $rule['callback'] : (isset($rule['callable']) ? $rule['callable'] : NULL); // 提前触发回调类的加载,以便能正常回调 if (is_array($callback) && count($callback) >= 2 && is_string($callback[0])) { // Type 2:静态类方法,如:array('MyClass', 'myCallbackMethod') class_exists($callback[0]); } else if (is_string($callback) && preg_match('/(.*)\:\:/', $callback, $macthes)) { // Type 4:静态类方法,如:'MyClass::myCallbackMethod' class_exists($macthes[1]); } if (empty($callback) || !is_callable($callback)) { throw new PhalApi_Exception_InternalServerError( T('invalid callback for rule: {name}', array('name' => $rule['name'])) ); } if (isset($rule['params'])) { return call_user_func($callback, $value, $rule, $rule['params']); } else { return call_user_func($callback, $value, $rule); } } }