---
title: "Interpreter - обробка власних правил"
url: https://laravelukraine.com/blog/interpreter-obrobka-vlasnix-pravil
author: "Олексій Бабінцев"
date: 2026-07-14
---

# Interpreter - обробка власних правил

Interpreter описує правила або вирази у вигляді невеликої власної мови (DSL) і вміє їх обчислювати.

### Яку проблему вирішує

Коли в системі багато повторюваних умов чи правил, які треба вміти комбінувати й конфігурувати, набір розкиданих `if` стає некерованим і непридатним для динамічної побудови.

### Як вирішує

Кожне правило стає окремим класом-виразом із методом `interpret()`. Складні умови збираються з простих через композицію (AND, OR, NOT) у дерево виразів, яке потім обчислюється для конкретного контексту.

У прикладі `AgeOver` - елементарний вираз; реальна сила з'являється, коли такі вирази комбінують у дерево.

```php
interface Expression
{
  public function interpret(array $context): bool;
}

class AgeOver implements Expression
{
  public function __construct(private int $age) {}

  public function interpret(array $context): bool
  {
    return ($context['age'] ?? 0) > $this->age;
  }
}

$rule = new AgeOver(18);
$ok = $rule->interpret(['age' => 20]);
```

### Де застосовувати

- Конфігуровані фільтри, правила доступу, пошукові умови, прості калькулятори формул.
- Коли правила задаються даними й комбінуються динамічно.

### Плюси та мінуси

- **+** Правила стають об'єктами - їх можна комбінувати й перевикористовувати.
- **+** Нове правило додається новим класом-виразом.
- **−** Дерево виразів багатослівне навіть для нескладних умов.
- **−** Для мови з пріоритетами операцій, дужками та синтаксисом Interpreter швидко стає некерованим; тоді краще повноцінний лексер/парсер або готова бібліотека (наприклад, Symfony ExpressionLanguage).
