加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP – 在“===”中首先评估什么?类型或值相等?

发布时间:2020-12-13 22:10:24 所属栏目:PHP教程 来源:网络整理
导读:我们有一个比较运算符,它有一个运算符’===’.有人可以指导,首先评估的是什么,“类型”还是价值平等? 解决方法 当然是类型, 通常在使用==运算符时 它会首先检查类型,如果它们不同,它会将其中一个转换为相同, 然后它将检查值是否等于, 因此,首先要评估Type.
我们有一个比较运算符,它有一个运算符’===’.有人可以指导,首先评估的是什么,“类型”还是价值平等?

解决方法

当然是类型,
通常在使用==运算符时

>它会首先检查类型,如果它们不同,它会将其中一个转换为相同,
>然后它将检查值是否等于,

因此,首先要评估Type.

编辑

参考artragis答案
下面是is_identical_function php 5.4.8的完整源代码(感谢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;
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读