gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:16:42 25 4
gpt4 key购买 nike

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

最佳答案

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

在关闭已打开的字符串时,您将返回到打开字符串之前的上下文(即,在本例中的函数调用上下文中)。

相关的 php 内部代码是:

  • the scanner将 ' 和 ' 之间的序列转换为不可分割的 TOKEN。
  • the parser将各个不可分割的标记放入语义上下文中。

这些是C code的相关卡盘让它发挥作用。它们是 PHP 内部运作的一部分(特别是 Zend 引擎)。

PHP 不会预见任何事情,它实际上会逐个字符地读取所有内容,并且一旦在不允许的语义上下文中发现意外的 TOKEN,它就会发出解析错误。

在您的情况下,它读取 token 'This'并且扫描器匹配一个新字符串。然后它继续读取 s ,当它找到空格时,它将 s 转换为 constant 。由于常量和之前找到的标记 'This' 一起不会形成任何 known reduction (可能的减少在我上面给您的解析器链接中进行了描述),解析器会发出类似

的错误

Unexpected T_STRING

正如您可以从这条消息中推断出的那样,它实际上指的是它已经发现的东西(或者它希望找到的东西),所以实际上没有任何东西没有预期

您的问题本身就是错误的,因为变量中没有撇号(在变量的标识符中)。 变量值中可能有撇号。不要混淆他们。值可以独立存在,无需变量:

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

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

关于php - PHP 如何自然地预测变量中的撇号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8710000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com