*/ private array $variables = []; /** * Register a variable definition. * * @param VariableDefinition $variable Variable. * * @since 0.1.0 */ public function register( VariableDefinition $variable ): void { $this->variables[ $variable->key() ] = $variable; } /** * All registered variables. * * @return list * * @since 0.1.0 */ public function all(): array { return array_values( $this->variables ); } /** * Build a bag from a context. * * @param VariableContext $context Context. * * @since 0.1.0 */ public function resolve( VariableContext $context ): VariableBag { $values = []; foreach ( $this->all() as $variable ) { $values[ $variable->key() ] = $variable->resolve( $context ); } return new VariableBag( $values ); } }