<?php
namespace nur\b\params;

use nur\b\IllegalAccessException;

/**
 * Class Parametrable: classe de base pour un objet paramétrable
 */
abstract class Parametrable implements IParametrable {
  use Tparametrable1;

  const PARAMETRABLE_PARAMS_SCHEMA = [];

  function __construct(?array $params=null) {
    $this->initParametrableParams($params);
  }

  #############################################################################
  function __call(string $name, array $args) {
    if ($this->parametrable__call($name, $args, $result)) return $result;
    throw IllegalAccessException::not_implemented($name);
  }
  static function _AUTOGEN_CONSTS(?string $class=null, bool $dynamicSchema=false): array {
    return parametrable_utils::_AUTOGEN_CONSTS(
      static::_get_parametrable_params_schema()
      , $class
      , $dynamicSchema);
  }
  const _AUTOGEN_LITERALS = null;
  const _AUTOGEN_METHODS = null;
  const _AUTO_GETTERS = null;
  const _AUTO_SETTERS = null;
  ## Ajouter ceci dans la classe dérivée
  #const _AUTOGEN_CONSTS = ["" => [self::class, "_AUTOGEN_CONSTS"]];
}