} protected function extended_callback($class, $arguments) { if (method_exists($class, self::EXTENDED_METHOD)) { $extended_arguments = array_merge(array($this), $arguments); call_user_func_array(array($class, self::EXTENDED_METHOD), $extended_arguments); } } static function error_handler($number, $message, $file, $line, $context) { if ($number != self::NON_STATIC_METHOD_CALL_ERROR || !preg_match('#^' . __FILE__ . '.+eval#', $file)) { return self::$previous_error_handler ? call_user_func_array(self::$previous_error_handler, func_get_args()) : false; } } static function register_error_handler() { return self::$previous_error_handler = set_error_handler(array(__CLASS__, 'error_handler')); } static function unregister_error_handler() { if (self::$previous_error_handler) { $handler = self::$previous_error_handler; self::$previous_error_handler = null; return set_error_handler($handler); } else { return restore_error_handler(); } } } OpenStruct::register_error_handler();
function test_register_error_handler() { restore_error_handler(); $get_error_handler = $this->get_error_handler; $handler = $get_error_handler(); assert_equal($handler, OpenStruct::register_error_handler()); assert_equal(array('OpenStruct', 'error_handler'), $get_error_handler()); assert_not_equal($handler, $get_error_handler()); }