我是以Java作为我的专业语言开始的,在我发现Ruby之前,PHP是我新项目的主要编程语言选择。这大概是六到七年前的事了,甚至更久。我在CodeIgniter[0]和各种库(如HHMVC[1])中度过了一段相当美好的时光。
无论如何,我想说的是--即使在那时,它的语法中最引人注目的特征是变量前的美元符号,这让我觉得这种语言的美学是不合格的,至少是令人讨厌的。显然,这并没有阻止我用PHP编写大量的应用程序,因为这更像是一个小麻烦,如果你愿意的话,这主要是为了学术目的而值得商榷的事情。
最近我突然想到一个问题:"美元符号的历史是什么? 为什么会有。"--所以像每个好问题一样,我开始用Google来寻找一些答案。
第一个影响--Perl。
因为PHP是基于Perl的,Perl使用。
Perl可能是从awk等shell工具中获得的,因此:
用一个符号来表示变量使字符串插值变得简单而清晰。Shell、Perl和PHP都是出于对快速和简单的字符串操作的需要而发展起来的。
然后Quora提供了一个非常好的轶事,将上述结果整理得更加完善。
PHP最初是作为Rasmus为管理他的网站而编写的一组Perl脚本实现的--"PHP "代表 "个人主页"。PHP中的其他一些语法元素也让人想起了Perl。
Perl可能是从awk和sh那里学来的,而后者可能是从比Unix早5-10年的BASIC那里学来的。
琐事:$(或@或%,在Perl 5中)被称为 "标志"。
由此我们发现,在计算机编程中,$、@和%实际上被称为圣痕[3]。下一站是看看这些符号在Perl中表示什么。
标量值总是用'"符号在语义上的作用与英语单词 "the "类似,它表示期望有一个单一的值:
$days # the simple scalar value "days"
$days[28] # the 29th element of array @days
$days{'Feb'} # the 'Feb' value from hash %days
$#days # the last index of array @days
整个数组(以及数组和哈希的片断)用'@'表示,其作用与英语中的 "these "或 "those "很相似,因为它表示期望有多个值:
@days # ($days[0], $days[1],... $days[n])
@days[3,4,5] # same as ($days[3],$days[4],$days[5])
@days{'a','c'} # same as ($days{'a'},$days{'c'})
整个哈希值用'%'来表示:
%days # (key1, val1, key2, val2 ...)
非常有趣,它们让我想起了Ruby的速记法或一般的分隔输入法:
%w(foo bar)
结论?PHP中变量的美元符号实际上是一个残存的符号,因为与Perl相比,数组和哈希没有任何符号。