【问题标题】:PHP: Using a variable inside a double quotesPHP:在双引号内使用变量
【发布时间】:2012-05-17 18:05:13
【问题描述】:

请检查以下代码。

$imagebaseurl = 'support/content_editor/uploads/$name';

$imagebaseurl 是一个变量,其中包含指向我的图像文件夹(上传)的链接,并且在该文件夹中,我还有一些以我的用户名命名的其他文件夹。例如:我有一个用户名叫 john,所以链接应该是这样的-> support/content_editor/uploads/john

主要想法是当任何用户登录并浏览他的图片库时,我想带他到他自己的画廊,该画廊基本上是以他的名字命名的。

当他访问画廊时,链接中$name 的值将来自用户的登录名(来自会话)。现在的问题是,您可能已经明白上面链接中$name 的位置是错误的,这就是它不起作用的原因。我得到了整个 URL> (support/content_editor/uploads/$name) 而不是 (support/content_editor/uploads/john)

现在你能告诉我如何在这个$imagebaseurl = 'support/content_editor/uploads/$name';中使用$name

【问题讨论】:

  • 使用双引号而不是单引号或使用 Radu 的解决方案。
  • ' 是单引号,不是双引号...)

标签: php


【解决方案1】:
$imagebaseurl = 'support/content_editor/uploads/' . $name;

$imagebaseurl = "support/content_editor/uploads/{$name}";

注意,如果使用双引号,上面的也可以写成:

$imagebaseurl = "support/content_editor/uploads/$name";

尽管养成在双引号中使用{$...} 而不是只使用$... 的习惯是很好的,因为有时您需要将变量插入到字符串中,而PHP 不清楚哪一部分是变量和哪个部分是字符串。

如果您想获得最佳性能,请使用带单引号的字符串连接。

【讨论】:

  • 只是一个旁注:建议不要使用双引号,其中包含变量。代码可读性和调试很糟糕,如果使用单引号,PHP 也会稍微快一些(就像 Radu 回答的第一个示例一样)。
  • 请注意,您可以在双引号内使用单引号,仍然可以解析变量<?php $test = 'test'; echo "This is a '$test'.";
  • 就我个人而言,我通常发现字符串插值方法比许多与点运算符连接在一起的表达式更具可读性。但是,使用它对性能的影响有多大?有人基准吗? :)
【解决方案2】:

我完全不同意之前的帖子。

我几乎可以称其为不好的使用习惯

$varname = 'EXAMPLE';

$fulltext = "This is an $varname";

根据我的经验,使用我的好朋友 sprintf() 更易于维护;

define('CONST_NAME', 'This is an example of a better %s');
define('EXAMPLE', sprintf(CONST_NAME, 'practice'));

echo EXAMPLE;

为什么?第一个可能看起来更清晰,但第二个更可重用。我建议使用 sprintf 而不是 php 魔术双引号无意义,字面上没有其他语言存在。

http://php.net/manual/en/function.sprintf.php

这也是与 C# 和许多其他语言非常相似的做法。

另见:https://msdn.microsoft.com/en-us/library/system.string.format(v=vs.110).aspx

【讨论】:

  • @b_dubb 我几乎不擅长 php,但是 php 支持其他语言不支持的一些东西,这里 Humble 并没有提供魔术引号不如 sprintf 非常相似的东西的理由,并且忽略了编写和维护 sprintf 字符串是多么麻烦——尤其是那些具有多部分的字符串。我不知道谁投了反对票。
  • Python 3.6 引入了格式化字符串文字 (docs.python.org/3/reference/lexical_analysis.html#f-strings)。
  • 我又加了一个反对票,原因如下:首先,这个语言特性被称为“字符串插值”,说它存在于“没有其他语言”不仅是错误的,但你可以看看这里,看看它的十几个例子:en.wikipedia.org/wiki/String_interpolation。这是一个非常有用的特性,特别是对于像 PHP 这样的语言所设计的任务类型。否决票的另一个原因是:这段代码“可重用”怎么样?可重用性与这个问题有什么关系?此外,答案过于固执己见,坦率地说是敌对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多