/** * Checks $condition, if false, throw the static exception class * * @param mixed $condition * @param string $message the error message * @param mixed $data extra data of the error * @param int $error_number the error code * * @since ADD MVC 0.0 * @version 0.1 */ static function assert($condition, $message = null, $data = NULL, $error_number = NULL) { if (!$condition) { if (!$message) { $caller_backtrace = debug::caller_backtrace(); $file_lines = file($caller_backtrace['file']); $file_line_content = $file_lines[$caller_backtrace['line'] - 1]; $tokens = token_get_all("<?php {$file_line_content} ?>"); $assert_arguments = array(); $assert_argument_string = ""; $on_argument = false; for ($token_x = 0; isset($tokens[$token_x]); ++$token_x) { $token = $tokens[$token_x]; if ($token === array(307, get_called_class(), 1) && isset($tokens[$token_x + 1])) { $pn_token = $tokens[++$token_x]; # Paamayim Nekudotayim if ($pn_token === array(376, "::", 1) && isset($tokens[$token_x + 2])) { $assert_token = $tokens[++$token_x]; if ($assert_token === array(307, __FUNCTION__, 1)) { $parenthesis_count = 1; $on_argument = true; ++$token_x; continue; } } } if ($on_argument) { if ($token === '(') { ++$parenthesis_count; } if ($token === ')') { --$parenthesis_count; } if ($parenthesis_count <= 0) { break; } $assert_argument_string .= is_array($token) ? $token[1] : $token; } } if (!$assert_argument_string) { $assert_argument_string = preg_replace('/^\\s*\\$?\\w+\\:\\:assert\\((.+)(\\,.+)?\\)\\;/', '$1', $file_line_content); } if (preg_match('/(?P<function_name>\\w+)\\((?P<arguments>.*?)\\)/', $assert_argument_string, $assert_condition_parts)) { $function = $assert_condition_parts['function_name']; $arguments = $assert_condition_parts['arguments']; switch ($function) { case 'is_int': $message = "{$arguments} is not integer"; break; case 'is_array': $message = "{$arguments} is not array"; break; case 'is_bool': $message = "{$arguments} is not boolean"; break; case 'is_callable': $message = "{$arguments} is not callable"; break; case 'is_double': $message = "{$arguments} is not double"; break; case 'is_float': $message = "{$arguments} is not float"; break; case 'is_null': $message = "{$arguments} is not null"; break; case 'is_numeric': $message = "{$arguments} is not numeric"; break; case 'is_object': $message = "{$arguments} is not object"; break; case 'is_resource': $message = "{$arguments} is not resource"; break; case 'is_scalar': $message = "{$arguments} is not scalar"; break; case 'is_string': $message = "{$arguments} is not string"; break; case 'isset': $message = "{$arguments} is not set"; break; case 'empty': $message = "{$arguments} is not empty"; break; case 'ctype_digit': $message = "{$arguments} is not numeric"; break; case 'is_float': $message = "{$arguments} is not float"; break; case 'filter_var': $message = "{$arguments} is not accepted"; break; case 'filter_has_var': $message = "{$arguments} does not exist"; break; case 'filter_input_array': $message = "{$arguments} is not accepted"; break; case 'filter_has_var': $message = "{$arguments} does not exist"; break; default: $message = "Failed to validate {$function} ({$arguments}) "; } } else { $message = "Failed to validate condition " . $assert_argument_string; } } $e = new static($message, $data, $error_number); throw $e; } }
/** * Checks $condition, if false, throw the exception class * * @param mixed $condition * @param string $message the error message * @param int $error_number the error code * @param mixed $data extra data of the error * * @since ADD MVC 0.0 * @version 0.1 */ static function assert($condition, $message = null, $data = NULL, $error_number = NULL) { if (!$condition) { if (!$message) { $caller_backtrace = debug::caller_backtrace(); $file_lines = file($caller_backtrace['file']); $file_line_content = $file_lines[$caller_backtrace['line'] - 1]; $assert_condition = preg_replace('/^\\s*\\w+\\:\\:assert\\((.+)(\\,.+)?\\)\\;/', '$1', $file_line_content); if (preg_match('/(?P<function_name>\\w+)\\((?P<arguments>.*?)\\)/', $assert_condition, $assert_condition_parts)) { $function = $assert_condition_parts['function_name']; $arguments = $assert_condition_parts['arguments']; switch ($function) { case 'is_int': $message = "{$arguments} is not integer"; break; case 'is_array': $message = "{$arguments} is not array"; break; case 'is_bool': $message = "{$arguments} is not boolean"; break; case 'is_callable': $message = "{$arguments} is not callable"; break; case 'is_double': $message = "{$arguments} is not double"; break; case 'is_float': $message = "{$arguments} is not float"; break; case 'is_null': $message = "{$arguments} is not null"; break; case 'is_numeric': $message = "{$arguments} is not numeric"; break; case 'is_object': $message = "{$arguments} is not object"; break; case 'is_resource': $message = "{$arguments} is not resource"; break; case 'is_scalar': $message = "{$arguments} is not scalar"; break; case 'is_string': $message = "{$arguments} is not string"; break; case 'isset': $message = "{$arguments} is not set"; break; case 'empty': $message = "{$arguments} is not empty"; break; case 'ctype_digit': $message = "{$arguments} is not numeric"; break; case 'is_float': $message = "{$arguments} is not float"; break; case 'filter_var': $message = "{$arguments} is not accepted"; break; case 'filter_has_var': $message = "{$arguments} does not exist"; break; case 'filter_input_array': $message = "{$arguments} is not accepted"; break; case 'filter_has_var': $message = "{$arguments} does not exist"; break; default: $message = "Failed to validate {$function} ({$arguments}) "; } } else { $message = "Failed to validate condition " . $assert_condition; } } $e = new static($message, $error_number); $e->data = $data; throw $e; } }