为什么我可以访问字符串中的 PHP 个对象?

Why can I access PHP objects inside a string?

这是一些 PHP 代码,用于呈现 HTML 锚元素。为什么会这样:

$archives .= "&nbsp;<a href='" . get_year_link($archPost->year) . "' 
title='Click to go to full listing for " . $archPost->year . "' target='_blank'>[List^]</a>";

完全像这样工作:

$archives .= "&nbsp;<a href='" . get_year_link($archPost->year) . "' 
title='Click to go to full listing for $archPost->year' target='_blank'>[List^]</a>";

来自 C/C# 等,我更喜欢第一个变体,因为我认为不能只在字符串中间转储变量 smack-dab。显然 PHP 对此没有问题。为什么不呢?

这个叫字符串插值,就是available in C# as well.

就我个人而言,我发现使用字符串插值是一种不好的做法。它使您的 IDE 中的代码难以阅读,并可能导致对字符串的误解。 (也许你想让那个美元符号表示美元符号,但是因为你使用双引号 " 而不是单引号 ',你现在有一个错误。)我改为连接:

$var = 'something' . $somethingElse;

如果您使用的是 echo,回显列表比串联更高效:

echo 'something', $somethingElse;

另一个问题,至少在您的示例中使用的是,您将数据直接转储到 HTML 的上下文中,而没有完成转义。如果您的输出包含保留实体,您将生成无效的歧义 HTML。根据使用的上下文,这甚至可能导致安全问题,例如 XSS 问题。您想要在 HTML 中使用的任意数据周围使用 htmlspecialchars()。 (或者,使用为您执行此操作的模板引擎。)