mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Move type-handling functions into ext/standard/type.c (which had
a few otherwise unused functions in it).
This commit is contained in:
parent
98220d2a82
commit
e68095972e
6 changed files with 368 additions and 460 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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)
|
||||
/* {{{ proto string gettype(mixed var)
|
||||
Returns the type of the variable */
|
||||
PHP_FUNCTION(gettype)
|
||||
{
|
||||
char *s;
|
||||
int type = IS_LONG;
|
||||
pval **arg;
|
||||
|
||||
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);
|
||||
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
} else
|
||||
return (IS_STRING);
|
||||
|
||||
return (type);
|
||||
} /* php_check_type */
|
||||
/* }}} */
|
||||
switch (Z_TYPE_PP(arg)) {
|
||||
case IS_NULL:
|
||||
RETVAL_STRING("NULL", 1);
|
||||
break;
|
||||
|
||||
/* {{{ php_check_ident_type
|
||||
* 0 - simple variable
|
||||
* 1 - non-index array
|
||||
* 2 - index array
|
||||
*/
|
||||
int php_check_ident_type(char *str)
|
||||
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 *s;
|
||||
char *result;
|
||||
int res_len;
|
||||
|
||||
if (!(s = (char *) strchr(str, '[')))
|
||||
return (GPC_REGULAR);
|
||||
s++;
|
||||
while (*s == ' ' || *s == '\t' || *s == '\n') {
|
||||
s++;
|
||||
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);
|
||||
}
|
||||
if (*s == ']') {
|
||||
return (GPC_NON_INDEXED_ARRAY);
|
||||
*/
|
||||
break;
|
||||
|
||||
default:
|
||||
RETVAL_STRING("unknown type", 1);
|
||||
}
|
||||
return (GPC_INDEXED_ARRAY);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ php_get_ident_index
|
||||
*/
|
||||
char *php_get_ident_index(char *str)
|
||||
/* {{{ proto bool settype(mixed var, string type)
|
||||
Set the type of the variable */
|
||||
PHP_FUNCTION(settype)
|
||||
{
|
||||
char *temp;
|
||||
char *s, *t;
|
||||
char o;
|
||||
pval **var, **type;
|
||||
char *new_type;
|
||||
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
return (temp);
|
||||
|
||||
|
||||
/* {{{ 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);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
#include "php_globals.h"
|
||||
#include "php_variables.h"
|
||||
#include "rfc1867.h"
|
||||
#include "ext/standard/type.h"
|
||||
|
||||
|
||||
#define SAFE_RETURN { \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue