Добавление параметра в лямбду - PullRequest
1 голос
/ 11 апреля 2019

Я использую лямбда-усы Мустача для реализации переводов в моих шаблонах.

В моих шаблонах используются теги такого типа:

<h1>{{#t}}Some translatable text{{/t}}</h1>

, затем в своих данных я регистрирую лямбду, чтобы получитьперевод:

$info['t'] = function($text, $render) {
   return translate($text);
}

Тем не менее, я хотел бы иметь возможность установить локаль в этой лямбде, но я не понимаю, как это правильно:

$locale = "nl_NL";
$info['t'] = function($text, $render, $locale) {
   return translate($text, $locale);
}

неработать (очевидно), потому что усы называют это лямбда с двумя параметрами.Попытка с параметром по умолчанию также не работает:

$lc = "nl_NL";
$info['t'] = function($text, $render, $locale = $lc) {
   return translate($text, $locale);
}

Поскольку вы не можете использовать переменную по умолчанию.

Как я могу заставить это работать?

Ответы [ 2 ]

3 голосов
/ 11 апреля 2019

Используйте ключевое слово use, чтобы связать переменные в область действия функции.

Замыкания могут наследовать переменные из родительской области. Любые такие переменные должны быть объявлены в заголовке функции [используя use].

http://www.php.net/manual/en/functions.anonymous.php

$locale = "nl_NL";
$info['t'] = function($text, $render) use ($locale) {
   return translate($text, $locale);
}
3 голосов
/ 11 апреля 2019

Я думаю, что некоторая проблема здесь с областью действия переменной

$lc = "nl_NL";
$info['t'] = function($text, $render) use($lc) {
   return translate($text, $lc);
}

должна решить вашу проблему

...