52 lines
1.9 KiB
PHP
52 lines
1.9 KiB
PHP
|
<?php
|
||
|
namespace nur\b\params;
|
||
|
|
||
|
/**
|
||
|
* implémentation de {@link IParametrable} pour une classe dérivée, dont le
|
||
|
* parent implémente {@link Tparametrable1}
|
||
|
*
|
||
|
* la classe qui utilise ce trait *doit* définir une constante
|
||
|
* PARAMETRABLE_PARAMS_SCHEMA
|
||
|
*/
|
||
|
trait Tparametrable {
|
||
|
use _Tparametrable0;
|
||
|
|
||
|
static function get_parametrable_params_schema(): array {
|
||
|
return array_merge(parent::get_parametrable_params_schema()
|
||
|
, self::parametrable_params_md()->getSchema());
|
||
|
}
|
||
|
|
||
|
function setParametrableParams(?array $params): void {
|
||
|
parent::setParametrableParams($params);
|
||
|
$parametrables = $this->getParametrableParamsParametrables();
|
||
|
$md = self::parametrable_params_md();
|
||
|
$modifiedKeys = parametrable_utils::set_params($parametrables, $this, $params, $md);
|
||
|
$this->afterSetParametrableParams($modifiedKeys, $md);
|
||
|
}
|
||
|
|
||
|
function initParametrableParams(?array $params, bool $setParametrableParams=true): void {
|
||
|
parent::initParametrableParams(null, false);
|
||
|
$parametrables = $this->getParametrableParamsParametrables();
|
||
|
parametrable_utils::set_defaults($parametrables, $this, self::parametrable_params_md());
|
||
|
if ($setParametrableParams) $this->setParametrableParams($params);
|
||
|
}
|
||
|
|
||
|
protected function splitParametrableParams(?array $params): array {
|
||
|
[$pparams, $pothers] = parent::splitParametrableParams($params);
|
||
|
[$cparams, $others] = self::split_parametrable_params($pothers);
|
||
|
$params = array_merge($pparams, $cparams);
|
||
|
return [$params, $others];
|
||
|
}
|
||
|
|
||
|
function parametrable__call(string $name, array $args, &$result): bool {
|
||
|
$md = self::parametrable_params_md();
|
||
|
$auto_getters = self::_AUTO_GETTERS;
|
||
|
$auto_setters = self::_AUTO_SETTERS;
|
||
|
if (parametrable_utils::should_call($name, $auto_getters, $auto_setters, $md)) {
|
||
|
$result = parametrable_utils::call($this, $name, $args, $auto_getters, $auto_setters, $md);
|
||
|
return true;
|
||
|
}
|
||
|
return parent::parametrable__call($name, $args, $result);
|
||
|
}
|
||
|
}
|