Интерфейс подобен контракту, в котором вы хотите, чтобы ваш класс реализации реализовал методы, написанные в контракте (интерфейс). Поскольку Java не предоставляет множественное наследование, программирование для интерфейса является хорошим способом достижения цели множественного наследования. Если у вас есть класс A, который уже расширяет какой-либо другой класс B, но вы хотите, чтобы класс A также следовал определенным рекомендациям или реализовывал определенный контракт, тогда вы можете сделать это путем программирования стратегии интерфейса.
Вы можете использовать preg_replace_callback
и использовать группу захвата ([^}]+)
, чтобы найти индекс в массиве $text
:
$repl = preg_replace_callback('/{{([^}]+)}}/', function ($m) use ($text) {
return $text[$m[1]]; }, $body);
//=> This is a body of really cool text from a book.
Оператор use ($text)
передает ссылку $text
к анонимному function
.
Просто для удовольствия, используя ваш массив как есть:
$result = str_replace(array_map(function($v){return '{{'.$v.'}}';}, array_keys($text)),
$text, $body);
Или, если ваш массив похож на $text['{{some_text}}']
, тогда просто:
$result = str_replace(array_keys($text), $text, $body);
Как сделать это наоборот - вместо поиска всех {{...}}
заполнителей и поиска их значений, итерации по всем значениям и замены заполнителей, которые соответствуют следующим образом:
foreach ($text as $key => $value) {
$placeholder = sprintf('{{%s}}', $key);
$body = str_replace($placeholder, $value, $body);
}
Вы можете даже включите его в функцию:
function populatePlaceholders($body, array $vars)
{
foreach ($vars as $key => $value) {
$placeholder = sprintf('{{%s}}', $key);
$body = str_replace($placeholder, $value, $body);
}
return $body;
}