<?php
namespace nur\data\types;

use nur\b\params\parametrable_utils;

/**
 * Trait _Tparametrable0: implémentation partagée entre {@link _Tparametrable1}
 * et {@link _Tparametrable} qui doit toujours être écrasée dans les classes
 * dérivées (i.e si les méthodes définies ici sont surchargées, elle ne seront
 * pas disponibles dans les classes dérivées parce qu'écrasées par la directive
 * `use _Tparametrable`)
 */
trait _Tparametrable0 {
  function setParametrableParams(?array $params): void {
    $parametrables = $this->getParametrableParamsParametrables();
    parametrable_utils::set_params($parametrables, $this, $params, self::PARAMETRABLE_PARAMS_SCHEMA);
  }

  function initParametrableParams(?array $params, bool $setParametrableParams=true): void {
    $parametrables = $this->getParametrableParamsParametrables();
    parametrable_utils::set_defaults($parametrables, $this, self::PARAMETRABLE_PARAMS_SCHEMA);
    if ($setParametrableParams) $this->setParametrableParams($params);
  }
}
