Вложенная (множественная) интерполяция строк в переполнении стека

Если у меня есть переменная, которая содержит вложенные переменные, например:

$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()?

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 для справки.

1

Другие решения

Да, это возможно, просто поместите переменные $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);
2

С помощью Sprintf или же Printf функция:

$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);
1

$user_email = '[email protected]';
$user_name = 'User Name';
$message = "Hello " . $user_name . ", an email was send to " . $user_email . " ...";
0
По вопросам рекламы [email protected]