我只注意到我可以使用一个变量作为参数,如下所示:$variable = "This's a string."; function('$variable')
,而不是像这样:function('This's a string');
。我可以明白为什么我不能做后者,但我不明白在第一个例子工作的幕后发生了什么。PHP如何自然地预测变量中的撇号?
2
A
回答
5
你听说过formal languages的方式吗?解析器跟踪上下文,因此它知道期望的字符是什么,什么不是。
在你关闭已经打开的字符串的那一刻,你将返回到打开字符串之前的上下文(即在这种情况下,在函数调用的上下文中)。
码的相关的PHP-内部件是:
- the scanner接通序列之间“和”成一个不可分割的令牌。
- the parser将单个不可分割的标记放入语义环境中。
这些是相关卡盘C code,使它的工作。它们是PHP内部工作的一部分(特别是Zend Engine)。
PHP并没有预料到任何东西,它真的会读取所有char字符,并且只要它在不允许的语义环境中找到意外的TOKEN,就会发出解析错误。
在您的情况下,它会读取令牌'This'
并且扫描程序会匹配一个新字符串。然后它继续阅读s
,当它找到一个空格时,它将s
变成constant。作为常数和先前发现的令牌'This'
一起不形成任何known reduction(可能削减解析器链接我给你上面描述),解析器会发出像
意外T_STRING
错误
你可以从该消息推断,它是真正指的是什么已经发现(或者它希望它找到的),所以没什么没有什么期待。
你的问题本身是错误的,因为变量中没有引用(变量的标识符)。您可能在变量的值中有一个引用者。不要混淆他们。值可以是独立的,没有一个变量:
<?php
'That\'s fine';
42;
(这是刚刚加载这些值到内存中一个有效的PHP代码)
0
1
功能( '$变量')不应该在" "
逃逸单引号内正确
字符工作中''
字符不逃脱单引号(他们不能逃脱自己!)。
使用""
,您还可以使用变量作为字符串的一部分,所以:
$pet = 'cat'
$myStory = "the $pet walked down the street"
function($pet)
是函数应该传递一个字符串
相关问题
- 1. 发布包含撇号的php变量
- 2. 用PHP中的双撇号替换包含单撇号的变量
- 3. 撇号在PHP变量符码
- 4. 如何添加撇号在PHP自身
- 5. URL变量W /撇号
- 6. 检测NSString中的撇号?
- 7. SQL Server替换php变量中的撇号
- 8. 在thymeleaf变量中释放撇号
- 9. Textarea中的撇号PHP
- 10. 如果变量文本包含撇号,PHP值不会显示
- 11. 撇号内的SCSS变量内容
- 12. 如何用双撇号替换撇号?
- 13. 如何创建PHP的撇号问题
- 14. 在PHP中取代撇号(')
- 15. 如何忽略php中的引号内的撇号?
- 16. 如何制作一个char变量是撇号的情况?
- 17. 如何逃脱撇号在我的变量名EJS
- 18. 如何在函数的变量PLPGSQL使用字符串撇号
- 19. 如何通过MySql传递带撇号的C#变量
- 20. 消化替代变量撇号
- 21. 撇号在mysql/php
- 22. 撇号php问题
- 23. PostgreSQL中的撇号和引用 - 如何替换撇号?
- 24. 如何将C#中的撇号转换为撇号?
- 25. PHP如何检测变量的变化?
- 26. aspx文件中的撇号撇号
- 27. 在html/php语句中正确地嵌套撇号/引号
- 28. 我的撇号变成了'
- 29. 如何让PHP的Magic __set像自然变量一样工作?
- 30. 在JavaScript中,如何存储包含引号和撇号的变量(来自数据库)?
如何'函数(“$变量”)'为你工作? '$ variable'永远不会被您之前设置的字符串替换。相反,字符串“$变量”将被赋予你的函数。 – sascha 2012-01-03 09:18:39
@ Sn0opy谢谢。伍德斯托克说,你好...在Birdanese手语。 – 2012-01-05 01:40:30