PHP對字符的遞增運算

我大學學的第一門編程語言是C
剛開學的時候老師爲了讓我們熟悉for循環以及ASCII碼,會讓我們對一個字符循環+1

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

輸出的結果是abcdefghijklmnopqrstuvwxyz

然後今天無聊用php試了試

<?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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章