2012-05-09 79 views
15

请检查以下代码。PHP:在双引号内使用变量

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

$imagebaseurl是包含一个链接到我的图像文件夹(上传)和里面的文件夹我有这些后,我的用户名命名的一些其他文件夹的变量。例如:我有一个名为john的用户,所以链接看起来应该像这样 - >support/content_editor/uploads/john

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

当他将访问该图库时,链接中的值$name将来自用户的登录名(来自会话)。现在的问题是,您可能已经知道上述链接中$name的位置是错误的,这就是为什么它不起作用。我得到这个整个URL>,而不是(支持/ content_editor /上传/ $名)(支持/ content_editor /上传/约翰)

现在请你告诉我如何使用$name在此$imagebaseurl = 'support/content_editor/uploads/$name';

+2

使用双引号代替单引号或使用Radu的解决方案。 –

+2

('''是一个单引号,不是双引号......) – 2012-05-09 08:32:01

+1

http://php.net/string – hakre

回答

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

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

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

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

虽然养成了在双引号中使用{$...}而不是只使用$...的习惯,但是在需要将变量插入到字符串中的时候,PHP并不明显知道哪部分是变量,哪部分是字符串。

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

+2

只是一个旁注:建议不要在内部使用带引号的双引号。对于代码可读性和调试来说这很可怕,如果使用单引号,PHP也会稍微快一些(就像Radu的答案的第一个例子)。 – kingmaple

+1

http://php.net/sprintf – hakre

+0

+1。注意:最好选择顶级解决方案。 – RSM

0

我不能不同意前一篇文章。

我几乎会去尽量把它称作不好的做法,使用

$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