2015-05-06 16 views
1

如果非要包含嵌套變量的變量,例如:嵌套(多個)字符串中PHP插值

$message = "Hello $user_name, an email was send to $user_email ..."; 
$user_name = 'User Name'; 
$user_email = '[email protected]'; 

是能夠產生的輸出,諸如:

Hello User Name, an email was send to [email protected] ... 

而不調用eval()

+0

我不這麼認爲,當你建立字符串'$ message'變量沒有定義。 – Toto

+0

可以肯定,PHP是解釋器語言,它是以自上而下的方式逐行執行的。 – Sachink

回答

1

可以「定義」佔位符和在你需要它更換。

$message = "Hello #user_name#, an email was send to #user_email# ..."; 
$user_name = 'User Name'; 
$user_email = '[email protected]'; 

$newMessage = str_replace(array("#user_name#", "#user_email#"), array($user_name, $user_email), $message); 

查看str_replace僅供參考。

2

是的,只需將變量$user_email$user_name放置在$message以上即可,因此它們將首先被實例化。

$user_email = '[email protected]'; 
$user_name = 'User Name'; 
$message = "Hello $user_name, an email was send to $user_email ..."; 

echo $message; //Will output: Hello User Name, an email was send to [email protected] ... 

編輯:讀你的反應後,您可以使用例如關閉:

$message = function($name = null, $email = null){ 
    return "Hello $name, an email was send to $email ..."; 
}; 

$user_name = 'User Name'; 
$user_email = '[email protected]'; 

$newMessage = $message($user_name, $user_email); 
+0

這種情況是,當我建立變量$消息的嵌套變量尚未定義。 $ user_name和$ user_email只是佔位符。 –

+0

你究竟能提供一些示例代碼? – Daan

+0

例如,$消息的內容可能來自數據庫記錄,稍後會在需要時顯示。 –

1

使用sprintfprintf功能:

$message = "Hello %s, an email was send to %s ..."; 
$user_name = 'User Name'; 
$user_email = '[email protected]'; 

echo sprintf($message, $user_name, $user_email); 

printf($message, $user_name, $user_email); 
0
$user_email = '[email protected]'; 
$user_name = 'User Name'; 
$message = "Hello " . $user_name . ", an email was send to " . $user_email . " ...";