首页 > 代码库 > 一段神奇的代码-关于PHP字符变量奇怪现象的解释

一段神奇的代码-关于PHP字符变量奇怪现象的解释

首先神奇的PHP是支持字符数据类型的,有同学就写了这样一段代码:

for ($c = ‘a‘; $c <= ‘z‘; $c++) {    echo $c . ‘ ‘;}

然而结果却不是他想要的a到z

a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah aiaj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex... on to yz

实现a到z的打印有N多的办法,比如说如下几种

for ($i = ‘a‘; $i != ‘aa‘; $i++)    echo $i . ‘ ‘;  for ($i = ord(‘a‘); $i <= ord(‘z‘); $i++)    echo chr($i) . ‘ ‘;  echo implode(‘ ‘, range(‘a‘, ‘z‘));

但我们还是要解释上面打印的那一堆是什么鬼?
这是因为在处理单个字符变量的算术操作时,PHP沿袭了Perl的用法而非C的
在Perl中

$a = ‘Z‘;$a++; //‘AA‘

在C中

a = ‘Z‘;a++;  //‘[‘   因为‘Z‘ 的 ASCII 值是 90,‘[‘ 的 ASCII 值是 91

注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z),如下可见:

$a="9F9";$b="9F9";var_dump(++$a); //"9G0"var_dump(--$b); //"9F9"  不变

然后有写成这样的同学哭了

$a = "9E0"; var_dump(++$a);  // float(10) #这TM又变成科学计数法了啊。。。

PHP从来不按套路出牌啊!

一段神奇的代码-关于PHP字符变量奇怪现象的解释