summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorjim winstead <jimw@php.net>2002-01-09 23:47:46 +0000
committerjim winstead <jimw@php.net>2002-01-09 23:47:46 +0000
commite68095972ea476731a485410b72d39088b69f643 (patch)
tree52486b343058a74bf7115503efeeb7a40dc9d1d7 /ext
parent98220d2a82d174ce5b157d44fabc255e953eedf2 (diff)
downloadphp-git-e68095972ea476731a485410b72d39088b69f643.tar.gz
Move type-handling functions into ext/standard/type.c (which had
a few otherwise unused functions in it).
Diffstat (limited to 'ext')
-rw-r--r--ext/standard/basic_functions.c385
-rw-r--r--ext/standard/basic_functions.h17
-rw-r--r--ext/standard/php_standard.h2
-rw-r--r--ext/standard/php_type.h (renamed from ext/standard/type.h)28
-rw-r--r--ext/standard/type.c401
5 files changed, 371 insertions, 462 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 5a613dc39a..1012068e74 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -248,10 +248,6 @@ void test_class_startup(void)
function_entry basic_functions[] = {
PHP_FE(constant, NULL)
- PHP_FE(intval, NULL)
- PHP_FE(floatval, NULL)
- PHP_FALIAS(doubleval, floatval, NULL)
- PHP_FE(strval, NULL)
PHP_FE(bin2hex, NULL)
PHP_FE(sleep, NULL)
PHP_FE(usleep, NULL)
@@ -275,8 +271,6 @@ function_entry basic_functions[] = {
PHP_FE(checkdate, NULL)
PHP_FE(flush, NULL)
- PHP_FE(gettype, NULL)
- PHP_FE(settype, first_arg_force_ref)
PHP_FE(wordwrap, NULL)
PHP_FE(htmlspecialchars, NULL)
PHP_FE(htmlentities, NULL)
@@ -511,21 +505,6 @@ function_entry basic_functions[] = {
PHP_FE(get_magic_quotes_gpc, NULL)
PHP_FE(get_magic_quotes_runtime, NULL)
- PHP_FE(is_null, NULL)
- PHP_FE(is_resource, NULL)
- PHP_FE(is_bool, NULL)
- PHP_FE(is_long, NULL)
- PHP_FE(is_float, NULL)
- PHP_FALIAS(is_int, is_long, NULL)
- PHP_FALIAS(is_integer, is_long, NULL)
- PHP_FALIAS(is_double, is_float, NULL)
- PHP_FALIAS(is_real, is_float, NULL)
- PHP_FE(is_numeric, NULL)
- PHP_FE(is_string, NULL)
- PHP_FE(is_array, NULL)
- PHP_FE(is_object, NULL)
- PHP_FE(is_scalar, NULL)
- PHP_FE(is_callable, third_arg_force_ref)
PHP_FE(import_request_variables, NULL)
PHP_FE(error_log, NULL)
PHP_FE(call_user_func, NULL)
@@ -564,6 +543,29 @@ function_entry basic_functions[] = {
PHP_FE(is_uploaded_file, NULL)
PHP_FE(move_uploaded_file, NULL)
+ /* functions from type.c */
+ PHP_FE(intval, NULL)
+ PHP_FE(floatval, NULL)
+ PHP_FALIAS(doubleval, floatval, NULL)
+ PHP_FE(strval, NULL)
+ PHP_FE(gettype, NULL)
+ PHP_FE(settype, first_arg_force_ref)
+ PHP_FE(is_null, NULL)
+ PHP_FE(is_resource, NULL)
+ PHP_FE(is_bool, NULL)
+ PHP_FE(is_long, NULL)
+ PHP_FE(is_float, NULL)
+ PHP_FALIAS(is_int, is_long, NULL)
+ PHP_FALIAS(is_integer, is_long, NULL)
+ PHP_FALIAS(is_double, is_float, NULL)
+ PHP_FALIAS(is_real, is_float, NULL)
+ PHP_FE(is_numeric, NULL)
+ PHP_FE(is_string, NULL)
+ PHP_FE(is_array, NULL)
+ PHP_FE(is_object, NULL)
+ PHP_FE(is_scalar, NULL)
+ PHP_FE(is_callable, third_arg_force_ref)
+
/* functions from reg.c */
PHP_FE(ereg, third_arg_force_ref)
PHP_FE(ereg_replace, NULL)
@@ -1284,71 +1286,6 @@ PHP_FUNCTION(putenv)
/* }}} */
#endif
-/* {{{ proto int intval(mixed var [, int base])
- Get the integer value of a variable using the optional base for the conversion */
-PHP_FUNCTION(intval)
-{
- pval **num, **arg_base;
- int base;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- base = 10;
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg_base);
- base = Z_LVAL_PP(arg_base);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- *return_value = **num;
- zval_copy_ctor(return_value);
- convert_to_long_base(return_value, base);
-}
-/* }}} */
-
-/* {{{ proto float floatval(mixed var)
- Get the float value of a variable */
-PHP_FUNCTION(floatval)
-{
- pval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- *return_value = **num;
- zval_copy_ctor(return_value);
- convert_to_double(return_value);
-}
-/* }}} */
-
-/* {{{ proto string strval(mixed var)
- Get the string value of a variable */
-PHP_FUNCTION(strval)
-{
- pval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- *return_value = **num;
- zval_copy_ctor(return_value);
- convert_to_string(return_value);
-}
-/* }}} */
-
/* {{{ proto void flush(void)
Flush the output buffer */
PHP_FUNCTION(flush)
@@ -1388,111 +1325,6 @@ PHP_FUNCTION(usleep)
}
/* }}} */
-/* {{{ proto string gettype(mixed var)
- Returns the type of the variable */
-PHP_FUNCTION(gettype)
-{
- pval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(arg)) {
- case IS_NULL:
- RETVAL_STRING("NULL", 1);
- break;
-
- case IS_BOOL:
- RETVAL_STRING("boolean", 1);
- break;
-
- case IS_LONG:
- RETVAL_STRING("integer", 1);
- break;
-
- case IS_RESOURCE:
- RETVAL_STRING("resource", 1);
- break;
-
- case IS_DOUBLE:
- RETVAL_STRING("double", 1);
- break;
-
- case IS_STRING:
- RETVAL_STRING("string", 1);
- break;
-
- case IS_ARRAY:
- RETVAL_STRING("array", 1);
- break;
-
- case IS_OBJECT:
- RETVAL_STRING("object", 1);
- /*
- {
- char *result;
- int res_len;
-
- res_len = sizeof("object of type ")-1 + Z_OBJCE_P(arg)->name_length;
- result = (char *) emalloc(res_len+1);
- sprintf(result, "object of type %s", Z_OBJCE_P(arg)->name);
- RETVAL_STRINGL(result, res_len, 0);
- }
- */
- break;
-
- default:
- RETVAL_STRING("unknown type", 1);
- }
-}
-/* }}} */
-
-/* {{{ proto bool settype(mixed var, string type)
- Set the type of the variable */
-PHP_FUNCTION(settype)
-{
- pval **var, **type;
- char *new_type;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &var, &type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(type);
- new_type = Z_STRVAL_PP(type);
-
- if (!strcasecmp(new_type, "integer")) {
- convert_to_long(*var);
- } else if (!strcasecmp(new_type, "int")) {
- convert_to_long(*var);
- } else if (!strcasecmp(new_type, "float")) {
- convert_to_double(*var);
- } else if (!strcasecmp(new_type, "double")) { /* deprecated */
- convert_to_double(*var);
- } else if (!strcasecmp(new_type, "string")) {
- convert_to_string(*var);
- } else if (!strcasecmp(new_type, "array")) {
- convert_to_array(*var);
- } else if (!strcasecmp(new_type, "object")) {
- convert_to_object(*var);
- } else if (!strcasecmp(new_type, "bool")) {
- convert_to_boolean(*var);
- } else if (!strcasecmp(new_type, "boolean")) {
- convert_to_boolean(*var);
- } else if (!strcasecmp(new_type, "null")) {
- convert_to_null(*var);
- } else if (!strcasecmp(new_type, "resource")) {
- php_error(E_WARNING, "settype: cannot convert to resource type");
- RETURN_FALSE;
- } else {
- php_error(E_WARNING, "settype: invalid type");
- RETURN_FALSE;
- }
- RETVAL_TRUE;
-}
-/* }}} */
-
/* {{{ proto string get_current_user(void)
Get the name of the owner of the current PHP script */
PHP_FUNCTION(get_current_user)
@@ -1558,145 +1390,6 @@ PHP_FUNCTION(get_magic_quotes_gpc)
}
/* }}} */
-
-void php_is_type(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- pval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(arg) == type) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-
-
-/* {{{ proto bool is_null(mixed var)
- Returns true if variable is null */
-PHP_FUNCTION(is_null)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_NULL);
-}
-/* }}} */
-
-/* {{{ proto bool is_resource(mixed var)
- Returns true if variable is a resource */
-PHP_FUNCTION(is_resource)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_RESOURCE);
-}
-/* }}} */
-
-/* {{{ proto bool is_bool(mixed var)
- Returns true if variable is a boolean */
-PHP_FUNCTION(is_bool)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_BOOL);
-}
-/* }}} */
-
-/* {{{ proto bool is_long(mixed var)
- Returns true if variable is a long (integer) */
-PHP_FUNCTION(is_long)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_LONG);
-}
-/* }}} */
-
-/* {{{ proto bool is_float(mixed var)
- Returns true if variable is float point*/
-PHP_FUNCTION(is_float)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_DOUBLE);
-}
-/* }}} */
-
-/* {{{ proto bool is_string(mixed var)
- Returns true if variable is a string */
-PHP_FUNCTION(is_string)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_STRING);
-}
-/* }}} */
-
-/* {{{ proto bool is_array(mixed var)
- Returns true if variable is an array */
-PHP_FUNCTION(is_array)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_ARRAY);
-}
-/* }}} */
-
-/* {{{ proto bool is_object(mixed var)
- Returns true if variable is an object */
-PHP_FUNCTION(is_object)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_OBJECT);
-}
-/* }}} */
-
-/* {{{ proto bool is_numeric(mixed value)
- Returns true if value is a number or a numeric string */
-PHP_FUNCTION(is_numeric)
-{
- zval **arg;
- int result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(arg)) {
- case IS_LONG:
- case IS_DOUBLE:
- RETURN_TRUE;
- break;
-
- case IS_STRING:
- result = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), NULL, NULL, 0);
- if (result == IS_LONG || result == IS_DOUBLE) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
- break;
-
- default:
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool is_scalar(mixed value)
- Returns true if value is a scalar */
-PHP_FUNCTION(is_scalar)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(arg)) {
- case IS_BOOL:
- case IS_DOUBLE:
- case IS_LONG:
- case IS_STRING:
- RETURN_TRUE;
- break;
-
- default:
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
/*
1st arg = error message
2nd arg = error option
@@ -2759,38 +2452,6 @@ PHP_FUNCTION(parse_ini_file)
}
/* }}} */
-/* {{{ proto bool is_callable(mixed var [, bool syntax_only [, string callable_name]])
- ??? */
-PHP_FUNCTION(is_callable)
-{
- zval **var, **syntax_only, **callable_name;
- char *name;
- zend_bool retval;
- zend_bool syntax = 0;
- int argc=ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &var, &syntax_only, &callable_name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 1) {
- convert_to_boolean_ex(syntax_only);
- syntax = Z_BVAL_PP(syntax_only);
- }
-
- if (argc > 2) {
- retval = zend_is_callable(*var, syntax, &name);
- zval_dtor(*callable_name);
- ZVAL_STRING(*callable_name, name, 0);
- } else {
- retval = zend_is_callable(*var, syntax, NULL);
- }
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-
static int copy_request_variable(void *pDest, int num_args, va_list args, zend_hash_key *hash_key)
{
char *prefix, *new_key;
diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h
index 7472a6790a..4a0c42cdfa 100644
--- a/ext/standard/basic_functions.h
+++ b/ext/standard/basic_functions.h
@@ -39,15 +39,10 @@ PHP_RSHUTDOWN_FUNCTION(basic);
PHP_MINFO_FUNCTION(basic);
PHP_FUNCTION(constant);
-PHP_FUNCTION(intval);
-PHP_FUNCTION(floatval);
-PHP_FUNCTION(strval);
PHP_FUNCTION(toggle_short_open_tag);
PHP_FUNCTION(sleep);
PHP_FUNCTION(usleep);
PHP_FUNCTION(flush);
-PHP_FUNCTION(gettype);
-PHP_FUNCTION(settype);
PHP_FUNCTION(ip2long);
PHP_FUNCTION(long2ip);
@@ -63,18 +58,6 @@ PHP_FUNCTION(set_magic_quotes_runtime);
PHP_FUNCTION(get_magic_quotes_runtime);
PHP_FUNCTION(get_magic_quotes_gpc);
-void php_is_type(INTERNAL_FUNCTION_PARAMETERS, int type);
-PHP_FUNCTION(is_null);
-PHP_FUNCTION(is_resource);
-PHP_FUNCTION(is_bool);
-PHP_FUNCTION(is_long);
-PHP_FUNCTION(is_float);
-PHP_FUNCTION(is_numeric);
-PHP_FUNCTION(is_string);
-PHP_FUNCTION(is_array);
-PHP_FUNCTION(is_object);
-PHP_FUNCTION(is_scalar);
-PHP_FUNCTION(is_callable);
PHP_FUNCTION(import_request_variables);
PHP_FUNCTION(error_log);
diff --git a/ext/standard/php_standard.h b/ext/standard/php_standard.h
index 0abadca406..6667fa6995 100644
--- a/ext/standard/php_standard.h
+++ b/ext/standard/php_standard.h
@@ -47,7 +47,6 @@
#include "uniqid.h"
#include "php_var.h"
#include "quot_print.h"
-#include "type.h"
#include "dl.h"
#include "php_crypt.h"
#include "head.h"
@@ -58,6 +57,7 @@
#include "php_assert.h"
#include "php_versioning.h"
#include "php_ftok.h"
+#include "php_type.h"
#define phpext_standard_ptr basic_functions_module_ptr
diff --git a/ext/standard/type.h b/ext/standard/php_type.h
index 2256f23048..f1a9dd9b29 100644
--- a/ext/standard/type.h
+++ b/ext/standard/php_type.h
@@ -18,16 +18,24 @@
/* $Id$ */
-#ifndef TYPE_H
-#define TYPE_H
+#ifndef PHP_TYPE_H
+#define PHP_TYPE_H
-extern int php_check_type(char *str);
-extern int php_check_ident_type(char *str);
-extern char *php_get_ident_index(char *str);
-
-#define GPC_REGULAR 0x1
-#define GPC_INDEXED_ARRAY 0x2
-#define GPC_NON_INDEXED_ARRAY 0x4
-#define GPC_ARRAY (GPC_INDEXED_ARRAY | GPC_NON_INDEXED_ARRAY)
+PHP_FUNCTION(intval);
+PHP_FUNCTION(floatval);
+PHP_FUNCTION(strval);
+PHP_FUNCTION(gettype);
+PHP_FUNCTION(settype);
+PHP_FUNCTION(is_null);
+PHP_FUNCTION(is_resource);
+PHP_FUNCTION(is_bool);
+PHP_FUNCTION(is_long);
+PHP_FUNCTION(is_float);
+PHP_FUNCTION(is_numeric);
+PHP_FUNCTION(is_string);
+PHP_FUNCTION(is_array);
+PHP_FUNCTION(is_object);
+PHP_FUNCTION(is_scalar);
+PHP_FUNCTION(is_callable);
#endif
diff --git a/ext/standard/type.c b/ext/standard/type.c
index de5f2a36ba..eb9f3888e7 100644
--- a/ext/standard/type.c
+++ b/ext/standard/type.c
@@ -19,86 +19,343 @@
/* $Id$ */
#include "php.h"
-#include "type.h"
-/* {{{ php_check_type
- * Determines if 'str' is an integer (long), real number or a string
- *
- * Note that leading zeroes automatically force a STRING type
- */
-int php_check_type(char *str)
-{
- char *s;
- int type = IS_LONG;
-
- s = str;
- if (*s == '0' && *(s + 1) && *(s + 1) != '.')
- return (IS_STRING);
- if (*s == '+' || *s == '-' || (*s >= '0' && *s <= '9') || *s == '.') {
- if (*s == '.')
- type = IS_DOUBLE;
- s++;
- while (*s) {
- if (*s >= '0' && *s <= '9') {
- s++;
- continue;
- } else if (*s == '.' && type == IS_LONG) {
- type = IS_DOUBLE;
- s++;
- continue;
- } else
- return (IS_STRING);
- }
- } else
- return (IS_STRING);
-
- return (type);
-} /* php_check_type */
-/* }}} */
-
-/* {{{ php_check_ident_type
- * 0 - simple variable
- * 1 - non-index array
- * 2 - index array
- */
-int php_check_ident_type(char *str)
+/* {{{ proto string gettype(mixed var)
+ Returns the type of the variable */
+PHP_FUNCTION(gettype)
{
- char *s;
+ pval **arg;
- if (!(s = (char *) strchr(str, '[')))
- return (GPC_REGULAR);
- s++;
- while (*s == ' ' || *s == '\t' || *s == '\n') {
- s++;
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
+ WRONG_PARAM_COUNT;
}
- if (*s == ']') {
- return (GPC_NON_INDEXED_ARRAY);
+
+ switch (Z_TYPE_PP(arg)) {
+ case IS_NULL:
+ RETVAL_STRING("NULL", 1);
+ break;
+
+ case IS_BOOL:
+ RETVAL_STRING("boolean", 1);
+ break;
+
+ case IS_LONG:
+ RETVAL_STRING("integer", 1);
+ break;
+
+ case IS_RESOURCE:
+ RETVAL_STRING("resource", 1);
+ break;
+
+ case IS_DOUBLE:
+ RETVAL_STRING("double", 1);
+ break;
+
+ case IS_STRING:
+ RETVAL_STRING("string", 1);
+ break;
+
+ case IS_ARRAY:
+ RETVAL_STRING("array", 1);
+ break;
+
+ case IS_OBJECT:
+ RETVAL_STRING("object", 1);
+ /*
+ {
+ char *result;
+ int res_len;
+
+ res_len = sizeof("object of type ")-1 + Z_OBJCE_P(arg)->name_length;
+ result = (char *) emalloc(res_len+1);
+ sprintf(result, "object of type %s", Z_OBJCE_P(arg)->name);
+ RETVAL_STRINGL(result, res_len, 0);
+ }
+ */
+ break;
+
+ default:
+ RETVAL_STRING("unknown type", 1);
}
- return (GPC_INDEXED_ARRAY);
}
/* }}} */
-/* {{{ php_get_ident_index
- */
-char *php_get_ident_index(char *str)
-{
- char *temp;
- char *s, *t;
- char o;
-
- temp = emalloc(strlen(str));
- temp[0] = '\0';
- s = (char *) strchr(str, '[');
- if (s) {
- t = (char *) strrchr(str, ']');
- if (t) {
- o = *t;
- *t = '\0';
- strcpy(temp, s + 1);
- *t = o;
- }
- }
- return (temp);
+/* {{{ proto bool settype(mixed var, string type)
+ Set the type of the variable */
+PHP_FUNCTION(settype)
+{
+ pval **var, **type;
+ char *new_type;
+
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &var, &type) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(type);
+ new_type = Z_STRVAL_PP(type);
+
+ if (!strcasecmp(new_type, "integer")) {
+ convert_to_long(*var);
+ } else if (!strcasecmp(new_type, "int")) {
+ convert_to_long(*var);
+ } else if (!strcasecmp(new_type, "float")) {
+ convert_to_double(*var);
+ } else if (!strcasecmp(new_type, "double")) { /* deprecated */
+ convert_to_double(*var);
+ } else if (!strcasecmp(new_type, "string")) {
+ convert_to_string(*var);
+ } else if (!strcasecmp(new_type, "array")) {
+ convert_to_array(*var);
+ } else if (!strcasecmp(new_type, "object")) {
+ convert_to_object(*var);
+ } else if (!strcasecmp(new_type, "bool")) {
+ convert_to_boolean(*var);
+ } else if (!strcasecmp(new_type, "boolean")) {
+ convert_to_boolean(*var);
+ } else if (!strcasecmp(new_type, "null")) {
+ convert_to_null(*var);
+ } else if (!strcasecmp(new_type, "resource")) {
+ php_error(E_WARNING, "settype: cannot convert to resource type");
+ RETURN_FALSE;
+ } else {
+ php_error(E_WARNING, "settype: invalid type");
+ RETURN_FALSE;
+ }
+ RETVAL_TRUE;
+}
+/* }}} */
+
+/* {{{ proto int intval(mixed var [, int base])
+ Get the integer value of a variable using the optional base for the conversion */
+PHP_FUNCTION(intval)
+{
+ pval **num, **arg_base;
+ int base;
+
+ switch (ZEND_NUM_ARGS()) {
+ case 1:
+ if (zend_get_parameters_ex(1, &num) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+ base = 10;
+ break;
+
+ case 2:
+ if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+ convert_to_long_ex(arg_base);
+ base = Z_LVAL_PP(arg_base);
+ break;
+
+ default:
+ WRONG_PARAM_COUNT;
+ }
+
+ *return_value = **num;
+ zval_copy_ctor(return_value);
+ convert_to_long_base(return_value, base);
+}
+/* }}} */
+
+/* {{{ proto float floatval(mixed var)
+ Get the float value of a variable */
+PHP_FUNCTION(floatval)
+{
+ pval **num;
+
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ *return_value = **num;
+ zval_copy_ctor(return_value);
+ convert_to_double(return_value);
+}
+/* }}} */
+
+/* {{{ proto string strval(mixed var)
+ Get the string value of a variable */
+PHP_FUNCTION(strval)
+{
+ pval **num;
+
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ *return_value = **num;
+ zval_copy_ctor(return_value);
+ convert_to_string(return_value);
+}
+/* }}} */
+
+static void php_is_type(INTERNAL_FUNCTION_PARAMETERS, int type)
+{
+ pval **arg;
+
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
+ RETURN_FALSE;
+ }
+
+ if (Z_TYPE_PP(arg) == type) {
+ RETURN_TRUE;
+ } else {
+ RETURN_FALSE;
+ }
+}
+
+
+/* {{{ proto bool is_null(mixed var)
+ Returns true if variable is null */
+PHP_FUNCTION(is_null)
+{
+ php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_NULL);
+}
+/* }}} */
+
+/* {{{ proto bool is_resource(mixed var)
+ Returns true if variable is a resource */
+PHP_FUNCTION(is_resource)
+{
+ php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_RESOURCE);
+}
+/* }}} */
+
+/* {{{ proto bool is_bool(mixed var)
+ Returns true if variable is a boolean */
+PHP_FUNCTION(is_bool)
+{
+ php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_BOOL);
+}
+/* }}} */
+
+/* {{{ proto bool is_long(mixed var)
+ Returns true if variable is a long (integer) */
+PHP_FUNCTION(is_long)
+{
+ php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_LONG);
+}
+/* }}} */
+
+/* {{{ proto bool is_float(mixed var)
+ Returns true if variable is float point*/
+PHP_FUNCTION(is_float)
+{
+ php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_DOUBLE);
+}
+/* }}} */
+
+/* {{{ proto bool is_string(mixed var)
+ Returns true if variable is a string */
+PHP_FUNCTION(is_string)
+{
+ php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_STRING);
+}
+/* }}} */
+
+/* {{{ proto bool is_array(mixed var)
+ Returns true if variable is an array */
+PHP_FUNCTION(is_array)
+{
+ php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_ARRAY);
+}
+/* }}} */
+
+/* {{{ proto bool is_object(mixed var)
+ Returns true if variable is an object */
+PHP_FUNCTION(is_object)
+{
+ php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_OBJECT);
+}
+/* }}} */
+
+/* {{{ proto bool is_numeric(mixed value)
+ Returns true if value is a number or a numeric string */
+PHP_FUNCTION(is_numeric)
+{
+ zval **arg;
+ int result;
+
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ switch (Z_TYPE_PP(arg)) {
+ case IS_LONG:
+ case IS_DOUBLE:
+ RETURN_TRUE;
+ break;
+
+ case IS_STRING:
+ result = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), NULL, NULL, 0);
+ if (result == IS_LONG || result == IS_DOUBLE) {
+ RETURN_TRUE;
+ } else {
+ RETURN_FALSE;
+ }
+ break;
+
+ default:
+ RETURN_FALSE;
+ break;
+ }
+}
+/* }}} */
+
+/* {{{ proto bool is_scalar(mixed value)
+ Returns true if value is a scalar */
+PHP_FUNCTION(is_scalar)
+{
+ zval **arg;
+
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ switch (Z_TYPE_PP(arg)) {
+ case IS_BOOL:
+ case IS_DOUBLE:
+ case IS_LONG:
+ case IS_STRING:
+ RETURN_TRUE;
+ break;
+
+ default:
+ RETURN_FALSE;
+ break;
+ }
+}
+/* }}} */
+
+/* {{{ proto bool is_callable(mixed var [, bool syntax_only [, string callable_name]])
+ Returns true if var is callable. */
+PHP_FUNCTION(is_callable)
+{
+ zval **var, **syntax_only, **callable_name;
+ char *name;
+ zend_bool retval;
+ zend_bool syntax = 0;
+ int argc=ZEND_NUM_ARGS();
+
+ if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &var, &syntax_only, &callable_name) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ if (argc > 1) {
+ convert_to_boolean_ex(syntax_only);
+ syntax = Z_BVAL_PP(syntax_only);
+ }
+
+ if (argc > 2) {
+ retval = zend_is_callable(*var, syntax, &name);
+ zval_dtor(*callable_name);
+ ZVAL_STRING(*callable_name, name, 0);
+ } else {
+ retval = zend_is_callable(*var, syntax, NULL);
+ }
+
+ RETURN_BOOL(retval);
}
/* }}} */