⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 type.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
字号:
/*   +----------------------------------------------------------------------+   | PHP Version 4                                                        |   +----------------------------------------------------------------------+   | Copyright (c) 1997-2007 The PHP Group                                |   +----------------------------------------------------------------------+   | This source file is subject to version 3.01 of the PHP license,      |   | that is bundled with this package in the file LICENSE, and is        |   | available through the world-wide-web at the following url:           |   | http://www.php.net/license/3_01.txt                                  |   | If you did not receive a copy of the PHP license and are unable to   |   | obtain it through the world-wide-web, please send a note to          |   | license@php.net so we can mail you a copy immediately.               |   +----------------------------------------------------------------------+   | Author: Rasmus Lerdorf <rasmus@php.net>                              |   +----------------------------------------------------------------------+*//* $Id: type.c,v 1.20.4.2.4.3 2007/01/01 09:46:48 sebastian Exp $ */#include "php.h"#include "php_incomplete_class.h"/* {{{ 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_docref(NULL TSRMLS_CC, E_WARNING, "Cannot convert to resource type");		RETURN_FALSE;	} else {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "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;	zval expr_copy;	int use_copy;	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {		WRONG_PARAM_COUNT;	}	*return_value = **num;	zend_make_printable_zval(return_value, &expr_copy, &use_copy);	if (use_copy) {		*return_value = expr_copy;		INIT_PZVAL(return_value);		zval_copy_ctor(return_value);		zval_dtor(&expr_copy);	} else {		zval_copy_ctor(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) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only one argument expected");		RETURN_FALSE;	}	if (Z_TYPE_PP(arg) == type) {		if (type == IS_OBJECT) {			zend_class_entry *ce;			ce = Z_OBJCE_PP(arg);			if (!strcmp(ce->name, INCOMPLETE_CLASS)) {				RETURN_FALSE;			}		}		if (type == IS_RESOURCE) {			char *type_name;			type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(arg) TSRMLS_CC);			if (!type_name) {				RETURN_FALSE;			}		}		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);}/* }}} *//* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -