Php 脚本语言中的美元符号-为什么?
有人知道吗,在一些脚本语言(如PHP或Perl)中,“美元变量表示法”背后的实际原因是什么?Python的创建者们没有发现Php 脚本语言中的美元符号-为什么?,php,javascript,python,perl,Php,Javascript,Python,Perl,有人知道吗,在一些脚本语言(如PHP或Perl)中,“美元变量表示法”背后的实际原因是什么?Python的创建者们没有发现$variable有用,我也没有。为什么PHP和Perl经常强迫我按shift-4 (好的,在Perl中,您可以通过区分$scalar、@array和%hash来解释它,但仍然可以成功地避免,类型不需要显式)他们在解析时使用它,以便可以轻松地将变量与其他内容区分开来。我不知道这是否是主要原因,但如果PHP没有带有识别标记的变量,则以下操作将不可能 echo "Welcome
$variable
有用,我也没有。为什么PHP和Perl经常强迫我按shift-4
(好的,在Perl中,您可以通过区分
$scalar
、@array
和%hash
来解释它,但仍然可以成功地避免,类型不需要显式)他们在解析时使用它,以便可以轻松地将变量与其他内容区分开来。我不知道这是否是主要原因,但如果PHP没有带有识别标记的变量,则以下操作将不可能
echo "Welcome back $name, we last saw you on $date";
更新:
它还创建了一种称为“可能”的东西。变量的有用性是有争议的,我不建议任何人经常使用它们。Perl变量的设计目标之一是使它们在视觉上与内置、保留字、控制流字等区别开来。对于不熟悉Perl的人来说,所有的线索看起来都像是行噪声。但是对于精通Perl的人来说,所谓的“sigils”使代码更具可读性和可理解性。正如您已经观察到的,Perl5中的sigil类型根据所访问的底层数据而变化。$对于标量,@表示数组,%表示散列 但是还有一个额外的视觉提示,
$hash{key}
指的是hash中保存的标量值。$
符号表示标量,{}
括号表示我们正在索引到散列中(就像一个示例)。在索引到数组的情况下,$array[0]
,例如:$
告诉我们正在访问数组中的标量值,方括号中的索引点处的标量值很明显。当我们看到@array[1,2,3]
时,通过@
我们会立即看到一个视觉通知,我们正在从数组中获取元素列表(假设列表上下文)(方括号仍然告诉我们从数组中获取它们)。这是一个数组切片。散列片应该是@hash{qw/这是另一个/}
。因此,@
再次告诉我们要寻找一个列表,而花括号告诉我们要从散列中获取它们。当我们看到没有后缀括号的@
或%
时,我们将获取整个数组或散列
这些线索很快就变成了第二天性
Perl6有点不同,需要熟练的Perl5用户几天时间才能习惯
这里有一篇关于这个主题的维基百科文章:
除了视觉引导,符号也使其他事情更容易;例如,解引用和插值。虽然更复杂的运算符可以用于插值之类的操作(有时仍然需要用于消除变量结尾和相邻单词字符继续的歧义),但目标可能是使简单的事情变得容易,同时使困难的事情成为可能。:
echo "Welcome back $name, we last saw you on $date";
一种语言可以避免某些局部歧义的部分原因是其他歧义被各种机制抑制。英语使用数字和语序,代词中带有格系统的痕迹:“男人看着男人,他们看着他。”这句话非常清楚谁在对谁做什么。类似地,Perl在其名词上有数字标记;也就是说,$dog
是一只狗,而@dog
可能是很多。所以$
和@
有点像英语中的“this”和“this”
在perl中,@array可以是一个标量,具体取决于上下文(它返回数组的长度),您应该尝试一下ruby:)这是以前问过的,您所说的“其他东西”可能是关键字,但可能有20个关键字,因此也很容易将它们与其他东西区分开来:)@JakubM。这取决于语言-例如perl有260多个关键字,php可能更少-但函数和其他符号(从库/模块导入的符号和您可以定义的符号)之间存在潜在冲突。另外,在无符号语言中,像
map
或command
这样的词没有明确的含义(是我放在变量中的数据结构?还是函数?还是shell内置/可执行?)看起来像PHP和Perl这样的语言一开始是文本处理语言,因此希望有快速的方法来完成本例所述的任务。因此,我认为这是正确的答案。Perl从shell脚本继承了这种语法,PHP从Perl继承了这种语法。这是我所知道的任何语言中最不可读的特征(Brainfuck、Befunge和Malbolge当然不算在内)。如果没有在每个变量名前加上符号,这仍然是可能的。为什么不呢,sprintf
也不会更糟。(在某些情况下要好得多)。@WTP:befunge实际上是相当可读的……我看到我两年前在@David O,have a twigil中以完全相同的方式回答了这个问题,我想我还有一些要说的,对吧?或者,我们认为PARL5属性的<代码>:<代码>也是Tigigl吗?PURL6,是的。twigil是第二个有趣的角色,可以在一个符号之后出现,所以:我想不算。我认为twigil可以算作形容词,而:是副词标记:)