Files
kiri-databases/Base/Setter.php
T

81 lines
1.4 KiB
PHP
Raw Normal View History

2023-03-30 18:59:50 +08:00
<?php
namespace Database\Base;
2023-04-05 10:15:50 +08:00
use Database\ModelInterface;
2023-03-30 18:59:50 +08:00
class Setter
{
2023-03-30 20:39:00 +08:00
private array $setter = [];
/**
* @param string $name
* @param string $className
* @param string $method
* @return void
*/
public function write(string $name, string $className, string $method): void
{
if (!isset($this->setter[$className])) {
$this->setter[$className] = [];
}
$this->setter[$className][$name] = $method;
}
/**
* @param string $className
* @param string $name
* @return bool
*/
public function has(string $className, string $name): bool
{
return isset($this->setter[$className]) && isset($this->setter[$className][$name]);
}
/**
* @param string $className
* @return array|null
*/
public function getAll(string $className): ?array
{
return $this->setter[$className] ?? null;
}
2023-04-05 10:15:50 +08:00
/**
* @param ModelInterface $class
* @param string $key
* @param mixed $value
* @return mixed
*/
public function override(ModelInterface $class, string $key, mixed $value): mixed
{
$method = $this->setter[$class::class][$key] ?? null;
if ($method !== null) {
return $class->{$method}($value);
}
return $value;
}
2023-03-30 20:39:00 +08:00
/**
* @param string $className
* @param string $name
* @return string|null
*/
public function get(string $className, string $name): ?string
{
if (!$this->has($className, $name)) {
return null;
}
return $this->setter[$className][$name];
}
2023-03-30 18:59:50 +08:00
}