【PHP】异客塞尔
世界 与 神奇的字符串++
通往异客塞尔
世界
在php的异世界里,突然有一天出现了一团印着xlsx
字样的异端物质。人们发现,它可以和一个命名为异客塞尔
的虫洞通信,这个虫洞可以通往生活着PM
的世界。
但起初,异世界的人们没法直接破解它,也没法生成它。为了寻求远方的交流,伟大的创世者开发出了phpexcel
等工具,成功的让人们借助工具理解了xlsx
,并且把信息以表格的形式塞进去。
就这样两个世界被连接在了一起。
独特编号破坏了异世界的优雅
熟悉了xlsx
的人们发现,它是二维的。每一列都有独特的编号。从第一列开始,依次是:A B C D E F 等等
但是,问题来了。26个字母完了之后,是什么?
- 答案是在前面添加一个A,如AA AB … BA BB。
谁知,这惹怒了异世界的人们。因为异世界的人们有一种叫做优雅
的规则。一条条手写字母,破坏了优雅
,这样愚蠢的填入xlsx
是不被允许的。
人们开始寻找解决办法。
神奇的++
带来了和平
++
也叫自增运算符,这在数字领域是一位常客。但是总有调皮的人们会不按常理使用,这就发现对于字符串
,它有神奇的作用。
当我们拿$a='A'
做实验,发现它能神奇的把A
,变成B
,变成C
。这就满足了优雅
的要求。
php > $a = 'A';
php > $a++;
php > var_dump($a);
string(1) "B"
php > $a++;
php > var_dump($a);
string(1) "C"
那么遇到$a='AZ'
怎么办呢。神奇的事情出现了,AZ
居然变成了BA
。异世界的人们直接全体起立、直呼:“AMAZING,太屌了”。
php > $a='AZ';
php > $a++;
php > var_dump($a);
string(2) "BA"
php > $a++;
php > var_dump($a);
string(2) "BB"
初寻的++
的真相
这群与xlsx
打交道的人们其实是异世界最底层的存在。他们只会使用造物主提供的各种工具,并不知道原因。
为了++
的魔法是怎么回事,人们敲开了造物主留下的manual
殿堂,想在里面寻找真相。
终于,在这间布满灰尘、人迹罕至的屋子里找到了线索:
在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 $a = ‘Z’; $a++; 将把 $a 变成’AA’,而在 C 中,a = ‘Z’; a++; 将把 a 变成 ‘[’(‘Z’ 的 ASCII 值是 90,’[’ 的 ASCII 值是 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增/递减其他字符变量则无效,原字符串没有变化。
来自:
- 《递增/递减运算符》 https://www.php.net/manual/zh/language.operators.increment.php
原来这是一种源于Perl
习惯的规则。
而Perl
是什么。在现场的人们只知道这是一种非常古老的语言,没人了解它。探寻之路只能暂且停滞。