Files
MyDSL/src/Token/Factory/FactoryInterface.php
2021-01-22 14:33:32 +08:00

38 lines
1012 B
PHP

<?php
/**
* @filename FactoryInterface.php
* @author Jerry Yan <792602257@qq.com>
* @date 2021/1/22 13:42
*/
namespace JerryYan\DSL\Token\Factory;
use JerryYan\DSL\Token\TokenInterface;
use JerryYan\DSL\Token\TokenUndefined;
abstract class FactoryInterface
{
/** @var array<string, class-string<TokenInterface>> Token类型及映射类 */
protected $tokenMap = [];
/** @var array<string, string> Token别名映射 */
protected $tokenNameMap = [];
/** @var class-string<TokenInterface> 默认Token类 */
protected $undefinedTokenClass = TokenUndefined::class;
public function getTokenByName(string $name): TokenInterface
{
$originalName = $name;
if (isset($this->tokenNameMap[$name])) {
$name = $this->tokenNameMap[$name];
}
if (!isset($this->tokenMap[$name])) {
return new $this->undefinedTokenClass($originalName);
} else {
return new $this->tokenMap[$name]($originalName);
}
}
}