为什么我可以访问字符串中的 PHP 个对象?
Why can I access PHP objects inside a string?
这是一些 PHP 代码,用于呈现 HTML 锚元素。为什么会这样:
$archives .= " <a href='" . get_year_link($archPost->year) . "'
title='Click to go to full listing for " . $archPost->year . "' target='_blank'>[List^]</a>";
完全像这样工作:
$archives .= " <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()
。 (或者,使用为您执行此操作的模板引擎。)
这是一些 PHP 代码,用于呈现 HTML 锚元素。为什么会这样:
$archives .= " <a href='" . get_year_link($archPost->year) . "'
title='Click to go to full listing for " . $archPost->year . "' target='_blank'>[List^]</a>";
完全像这样工作:
$archives .= " <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()
。 (或者,使用为您执行此操作的模板引擎。)