Я пытаюсь создать систему достижений для сайта для запоминания («Вы запомнили 50 карт» и т. Д.), А метод, который я пытаюсь использовать, - это массив анонимных функции:PHP - Анонимная функция как элемент статического массива
class AchievementController extends Controller
{
private static $rules = array(
'card'=>array(
1=>function() {
//do check for achievement
},
2=>function() {
//do check for achievement
}
),
'set'=>array(
5=>function() {
//do check for achievement
},
6=>function() {
//do check for achievement
},
)
);
//...
}
идея заключается в том, что определенные типы правил для достижения будут проверены в определенное время, то есть, когда вы изучаете новую карту, card
подмножество будет проверяться. Я надеялся использовать foreach
цикл вроде этого:
foreach(self::$rules[$type] as $rule)
{
$rule();
}
Однако, когда я пытаюсь объявить $rules
массив, я получаю эту ошибку:
PHP Parse error: syntax error, unexpected 'function' (T_FUNCTION) in
/.../controllers/achievement.php on line 24
Если я объявляю $rules
внутри функция (НЕ статическая), она работает нормально. Я не могу помещать его в конструктор, потому что этот класс используется статически, поэтому конструктор не будет вызван.
Мой вопрос: возможно ли это сделать в статическом массиве? Или я должен просто сделать что-то еще?
(Дополнительный вопрос: Есть ли лучший способ, чем это сделать достижение)
Какая версия php вы используете ... анонимные функции недоступны до 5.3. – Orangepill
Почему так много закрытий? Кажется маловероятным, что вся логика является взаимоисключающей? Таким образом, рассмотрите подклассирование и использование полиморфизма. –
@Orangepill, я использую версию 5.3. – musicnothing