php的一些小众用法,很多老的php驱动在使用的时候也会出现问题。今天就来说说php的自增运算符。bool值对bool值无效。#php-r'$a=false;$a++;var_dump($a);';bool(false)nullvalue为空值,自增后为整数1。#php-r'$a=null;$a++;var_dump($a);';int(1)数值运算正常范围内的整数:#php-r'$a=1;$a++;var_dump($a);';int(2)最大整数,整数直接变成浮点数:#php-r'$a=9223372036854775807;$a++;var_dump($a);'float(9.2233720368548E+18)#php-r'$a=9223372036854775806;$a++;var_dump($a);'int(9223372036854775807)浮点运算:如果在精度范围内则加1,如果不在精度范围内则忽略。字符操作继承自perl的字符增量运算符。以字符#php-r'$a="a";结尾$a++;var_dump($a);';string(1)"b"#php-r'$a="z";$a++;var_dump($a);';string(2)"aa"#php-r'$a="A";$a++;var_dump($a);';string(1)"B"#php-r'$a="Z";$a++;var_dump($a);';string(2)"AA"#php-r'$a="zzz";$a++;var_dump($a);';string(4)"aaaa"数字结尾#php-r'$a="Z1";$a++;var_dump($a);';string(2)"Z2"#php-r'$a="Z9";$a++;var_dump($a);';string(3)在“AA0”php源码中,字符串自增运算符的算法描述:#defineLOWER_CASE1#defineUPPER_CASE2#defineNUMERIC3staticvoidZEND_FASTCALLincrement_string(zval*str)//*关闭编译警告*/intch;如果(Z_STRLEN_P(str)==0){zval_ptr_dtor_str(str);ZVAL_INTERNED_STR(str,ZSTR_CHAR('1'));返回;}if(!Z_REFCOUNTED_P(str)){Z_STR_P(str)=zend_string_init(Z_STRVAL_P(str),Z_STRLEN_P(str),0);Z_TYPE_INFO_P(str)=IS_STRING_EX;}elseif(Z_REFCOUNT_P(str)>1){Z_DELREF_P(str);Z_STR_P(str)=zend_string_init(Z_STRVAL_P(str),Z_STRLEN_P(str),0);}else{zend_string_forget_hash_val(Z_STR_P(str));}s=Z_STRVAL_P(str);做{ch=s[pos];if(ch>='a'&&ch<='z'){if(ch=='z'){//当结尾为z时需要进位,修改为as[pos]='a';进位=1;}else{s[pos]++;进位=0;}last=LOWER_CASE;}elseif(ch>='A'&&ch<='Z'){if(ch=='Z'){//同样,当结尾为Z时,需要进位,修改为As[pos]='A';进位=1;}else{s[pos]++;进位=0;}last=UPPER_CASE;}elseif(ch>='0'&&ch<='9'){if(ch=='9'){//当end为9时,需要进位s[pos]='0';进位=1;}else{s[pos]++;进位=0;}最后=数字;}else{进位=0;休息;}if(carry==0){//如果当前位已经处理完毕,则结束,否则一直处理到第一个位break;}}while(pos-->0);if(carry){//需要进位,需要额外分配一个字节t=zend_string_alloc(Z_STRLEN_P(str)+1,0);memcpy(ZSTR_VAL(t)+1,Z_STRVAL_P(str),Z_STRLEN_P(str));ZSTR_VAL(t)[Z_STRLEN_P(str)+1]='\0';switch(last){//考虑最后一位标识的类型,分配不同的数据大小写NUMERIC:ZSTR_VAL(t)[0]='1';休息;案例UPPER_CASE:ZSTR_VAL(t)[0]='A';休息;caseLOWER_CASE:ZSTR_VAL(t)[0]='a';休息;}zend_string_free(Z_STR_P(str));ZVAL_NEW_STR(str,t);}}php自增运算符文档来源:https://blog.lpflpf.cn/passag...
