PHP – 在“===”中首先评估什么?类型或值相等?
发布时间:2020-12-13 22:10:24 所属栏目:PHP教程 来源:网络整理
导读:我们有一个比较运算符,它有一个运算符’===’.有人可以指导,首先评估的是什么,“类型”还是价值平等? 解决方法 当然是类型, 通常在使用==运算符时 它会首先检查类型,如果它们不同,它会将其中一个转换为相同, 然后它将检查值是否等于, 因此,首先要评估Type.
我们有一个比较运算符,它有一个运算符’===’.有人可以指导,首先评估的是什么,“类型”还是价值平等?
解决方法
当然是类型,
通常在使用==运算符时 >它会首先检查类型,如果它们不同,它会将其中一个转换为相同, 因此,首先要评估Type. 编辑 参考artragis答案 ZEND_API int is_identical_function(zval *result,zval *op1,zval *op2 TSRMLS_DC) /* {{{ */ { Z_TYPE_P(result) = IS_BOOL; if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) { Z_LVAL_P(result) = 0; return SUCCESS; } switch (Z_TYPE_P(op1)) { // here it will check the Type and below it will check the value case IS_NULL: Z_LVAL_P(result) = 1; break; case IS_BOOL: case IS_LONG: case IS_RESOURCE: Z_LVAL_P(result) = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); break; case IS_DOUBLE: Z_LVAL_P(result) = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); break; case IS_STRING: Z_LVAL_P(result) = ((Z_STRLEN_P(op1) == Z_STRLEN_P(op2)) && (!memcmp(Z_STRVAL_P(op1),Z_STRVAL_P(op2),Z_STRLEN_P(op1)))); break; case IS_ARRAY: Z_LVAL_P(result) = (Z_ARRVAL_P(op1) == Z_ARRVAL_P(op2) || zend_hash_compare(Z_ARRVAL_P(op1),Z_ARRVAL_P(op2),(compare_func_t) hash_zval_identical_function,1 TSRMLS_CC)==0); break; case IS_OBJECT: if (Z_OBJ_HT_P(op1) == Z_OBJ_HT_P(op2)) { Z_LVAL_P(result) = (Z_OBJ_HANDLE_P(op1) == Z_OBJ_HANDLE_P(op2)); } else { Z_LVAL_P(result) = 0; } break; default: Z_LVAL_P(result) = 0; return FAILURE; } return SUCCESS; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |