<?php
namespace nur\data\expr;

/**
 * Interface IExpr: une expression à évaluer dans un contexte
 */
interface IExpr {
  /** schéma d'une représentation d'une expression sous forme de tableau */
  const SCHEMA = [
    "value" => [null, null, "définition de l'expression", true],
    "name" => [null, null, "identifiant de l'expression dans le modèle", true],
    "title" => [null, null, "description courte de l'expression, pour affichage", false,
      "desc" => "vaut [name] par défaut",
    ],
  ];

  /** obtenir la définition de l'expression, le cas échéant */
  function getValue(): ?string;

  /** obtenir l'identifiant de l'expression */
  function getName(): string;

  /** obtenir une description courte de l'expression, pour affichage */
  function getTitle(): string;

  /** évalue l'expression dans le contexte spécifié et retourne sa valeur */
  function eval(IContext $context);
}