58 lines
1.5 KiB
PHP
58 lines
1.5 KiB
PHP
<?php
|
|
namespace nur\data\expr;
|
|
|
|
use nur\A;
|
|
use nur\b\coll\BaseArray;
|
|
use nur\b\ValueException;
|
|
use nur\func;
|
|
use nur\md;
|
|
|
|
/**
|
|
* Class GenericExpr: une expression générique, utilisée par défaut
|
|
*/
|
|
class GenericExpr extends BaseArray implements IExpr {
|
|
static final function with($expr, ?string $key=null): IExpr {
|
|
if ($expr instanceof IExpr) return $expr;
|
|
return new GenericExpr($expr, $key);
|
|
}
|
|
|
|
function __construct($data=null, ?string $key=null) {
|
|
md::ensure_schema($data, static::SCHEMA, null, false);
|
|
A::replace_z($data, "name", $key);
|
|
A::replace_z_indirect($data, "name", "value");
|
|
A::replace_z_indirect($data, "title", "name");
|
|
parent::__construct($data);
|
|
}
|
|
|
|
function getValue(): ?string {
|
|
return $this->data["value"];
|
|
}
|
|
|
|
function getName(): string {
|
|
return $this->data["name"];
|
|
}
|
|
|
|
function getTitle(): string {
|
|
return $this->data["title"];
|
|
}
|
|
|
|
public function eval(IContext $context) {
|
|
$expr = $this->getValue();
|
|
if (func::is_static($expr) || func::is_method($expr)) {
|
|
return $context->callMethod($expr);
|
|
} elseif (is_string($expr)) {
|
|
$prefix = substr($expr, 0, 1);
|
|
if ($prefix == "*") {
|
|
# session
|
|
return $context->getSession(substr($expr, 1));
|
|
} elseif ($prefix == "+") {
|
|
# config
|
|
return $context->getConfig(substr($expr, 1));
|
|
}
|
|
# valeur à récupérer du contexte
|
|
return $context->getValue($expr);
|
|
}
|
|
throw ValueException::unexpected_type(["string", "callable"], $expr);
|
|
}
|
|
}
|