呵呵,可是没人讨论,无从下手啊。
先举个例子吧, 那个讨论空不空的字符串的地方,!==和===
在PHP4的源代码里面这样表示的ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2)
{
result->type = IS_BOOL;
if (op1->type != op2->type) {
result->value.lval = 0;
return SUCCESS;
}
switch (op1->type) {
case IS_NULL:
result->value.lval = (op2->type==IS_NULL);
break;
case IS_BOOL:
case IS_LONG:
case IS_RESOURCE:
result->value.lval = (op1->value.lval == op2->value.lval
);
break;
case IS_DOUBLE:
result->value.lval = (op1->value.dval == op2->value.dval
);
break;
case IS_STRING:
if ((op1->value.str.len == op2->value.str.len)
&& (!memcmp(op1->value.str.val, op2->value.str.v
al, op1->value.str.len))) {
result->value.lval = 1;
} else {
result->value.lval = 0;
}
break;
case IS_ARRAY:
....
case IS_OBJECT:
....
....
察看case IS_STRING:那一段就知道"==="判断什么的了, "!=="是对"==="去反的操作
先举个例子吧, 那个讨论空不空的字符串的地方,!==和===
在PHP4的源代码里面这样表示的ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2)
{
result->type = IS_BOOL;
if (op1->type != op2->type) {
result->value.lval = 0;
return SUCCESS;
}
switch (op1->type) {
case IS_NULL:
result->value.lval = (op2->type==IS_NULL);
break;
case IS_BOOL:
case IS_LONG:
case IS_RESOURCE:
result->value.lval = (op1->value.lval == op2->value.lval
);
break;
case IS_DOUBLE:
result->value.lval = (op1->value.dval == op2->value.dval
);
break;
case IS_STRING:
if ((op1->value.str.len == op2->value.str.len)
&& (!memcmp(op1->value.str.val, op2->value.str.v
al, op1->value.str.len))) {
result->value.lval = 1;
} else {
result->value.lval = 0;
}
break;
case IS_ARRAY:
....
case IS_OBJECT:
....
....
察看case IS_STRING:那一段就知道"==="判断什么的了, "!=="是对"==="去反的操作
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货