PHP对字符的递增运算

我大学学的第一门编程语言是C
刚开学的时候老师为了让我们熟悉for循环以及ASCII码,会让我们对一个字符循环+1

for(int i = 'a'; i <= 'z'; i++){
    printf("%c",i);
} 

输出的结果是abcdefghijklmnopqrstuvwxyz

然后今天无聊用php试了试


    for($i = 'a'; $i <= 'z'; $i++){
        echo $i;
    }
?>

很多人都会觉得应该和C的输出是一样的吧。但是! 但是!

请看结果!

abcdefghijklmnopqrstuvwxyz**aaabacadaeafagahaiajakalamanaoapaqarasatauavawaxayazbabbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzcacbcccdcecfcgchcicjckclcmcn………**

好神奇,跟我的预想也太不一样了吧!

然后我就去manual找原因去了
关键字:php 字符递增递减运算

原文如下:

PHP支持C风格的前/后递增与递减运算符。
Note:++/–运算符不影响布尔值。递减NULL值没有效果,但是递增NULL的结果是1.

【Soga, 以前还不知道呢。但是这个跟我现在遇到的问题不同,接着往下看】

在处理字符变量的算术运算是,PHP沿袭了Perl的习惯,而非C得。例如,在Perl中$a = 'Z'; $a++;将把$a变成‘AA’,而在C中,a='Z'; a++;将把a变成‘[‘。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z和A-Z)。++/- -其他字符变量则无效,原字符串没有变化。

看完Manual知道了为什么会造成上面的结果,但是不理解为什么不沿袭C的风格 - _ -

虽然手册里面也说字符变量字符变量的,但是实际上感觉并不存在字符变量。
学的其他语言,如C++、JAVA中,双引号表示的是字符串,而单引号表示的是字符;而在php中双引号中可以包含变量,单引号是纯字符串,所以单引号的编译速度比双引号的快(当初学长用QQ解释的时候怎么都没理解……真实笨笨哒……)。

因为比如说var_dump(chr(90));
得到的是 string ‘Z’(length=1)

你可能感兴趣的:(学习笔记-php)