PHP如何自然地预测变量中的撇号?

时间:2012-01-03 09:13:46

标签: php coding-style syntax arguments apostrophe

我刚注意到我可以使用变量作为参数,例如:$variable = "This's a string."; function('$variable'),而不是这样:function('This's a string');。我可以理解为什么我不能做后者,但我不明白在第一个例子工作的幕后发生了什么。

3 个答案:

答案 0 :(得分:5)

你听说过formal languages吗?解析器跟踪上下文,因此,它知道预期的字符是什么,什么不是。

当您关闭已经打开的字符串时,您将在打开字符串之前返回上下文(即,在这种情况下,在函数调用的上下文中)。

相关的php内部代码片段是:

  • the scanner将序列转换为'和'进入一个不可分割的TOKEN。
  • the parser将个体不可分割的标记置于语义上下文中。

这些是C code的相关工具,使其有效。它们是PHP内部工作的一部分(特别是Zend引擎)。

PHP没有预料到任何东西,它真的通过char读取所有char,并且一旦在语义上下文中发现意外的TOKEN就不会发出解析错误。

在您的情况下,它会读取令牌'This',并且扫描程序会匹配新字符串。然后继续阅读s,当找到空格时,它会将s变为constant。由于常量和先前找到的标记'This'一起形成任何known reduction(可能的缩减在我上面给出的解析器链接中描述),解析器问题像

这样的错误
  

意外的T_STRING

正如你可以从这个消息中推断出来的,它实际上指的是它所发现的东西(或它希望它发现了什么),因此它确实没有任何预期。< / p>

你的问题本身是错误的,因为变量中没有叛逆者(在变量的标识符中)。您可能在变量的值中有一个叛逆者。不要混淆他们。值可以单独存在,没有变量:

<?php
'That\'s fine';
42;

(这是一个有效的PHP代码,它只是将这些值加载到内存中)

答案 1 :(得分:1)

function('$ variable')不应该正常工作

" "中的字符转义单引号

''中的字符不会逃脱单引号(它们无法逃脱!)。

使用""还可以将变量用作字符串的一部分,所以:

$pet = 'cat'
$myStory = "the $pet walked down the street"

function($pet)是函数传递字符串的方式

答案 2 :(得分:0)

像这样使用

function('This\'s a string');