2012-05-09 77 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