logikostech / class-options
类选项管理器
1.0.0
2017-06-15 18:09 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: >=4.0
This package is auto-updated.
Last update: 2024-09-21 20:25:52 UTC
README
Logikos\ClassOptions
用法
将其添加到任何类中,如下所示
<?php use Logikos\ClassOptions\ConfigurableInterface; use Logikos\ClassOptions\ConfigurableTrait; use Logikos\ClassOptions\OptionDefinition; class Configurable implements ConfigurableInterface { use ConfigurableTrait; const OPTION_FOO = 'foo'; const OPTION_BAR = 'bar'; const OPTION_REQUIRED = 'required'; const OPTION_NO_DASH = 'noDashes'; const OPTION_INT_ONLY = 'intOnly'; const OPTION_DATE = 'date'; public function __construct() { $this->addOption(self::OPTION_FOO); $this->addOption(self::OPTION_BAR); $this->defineOption($this->requiredOption()); $this->defineOption($this->noDashesOption()); $this->defineOption($this->intOnlyOption()); $this->defineOption($this->dateOption()); } public function execute() { if (!$this->validateOptions()) throw new \Exception('All required options must be set!'); // code to execute } private function requiredOption() { $o = new OptionDefinition(self::OPTION_REQUIRED); $o->makeRequired(); return $o; } private function noDashesOption() { $o = new OptionDefinition(self::OPTION_NO_DASH); $o->setValuePattern('/[^-]+/'); return $o; } private function intOnlyOption() { $o = new OptionDefinition(self::OPTION_INT_ONLY); $o->setValidationHook('is_int'); return $o; } private function dateOption() { $o = new OptionDefinition(self::OPTION_DATE); $o->setValidationHook(function($value) { $date = date_parse($value); return $date["error_count"] === 0; }); return $o; } }
定义选项
如您所见,特质的用户可以使用defineOption(OptionDefinitionInterface $option)
或使用addOption(string 'name')
方法定义一个选项。
选项定义
创建一个新的命名选项定义:$o = new OptionDefinition('foo');
这已经足够创建一个选项。但是,如果您想验证可以设置到选项中的值的类型,有几个辅助方法。
$o->setValuePattern('/[0-1]+/');
- 使用正则表达式验证值设置$o->setValidationHook('is_int');
- 传递任何可调用函数,并将值作为第一个参数传递给它。如果可调用函数返回false,将抛出异常。$o->setValidationHook(function($value){return (is_int($value) && $value>5);});
- 另一个可调用函数示例。
这些验证将在调用setValue
时进行检查,如果验证失败,将抛出异常。
您还可以使用makeRequired()
要求设置选项,然后您可以在任何时间调用isValid()
,它将全面验证测试模式或可调用的值,并检查是否已设置(如果它是必需的)。尽管isValid()
不会抛出异常,它只返回布尔值。尽管它确实检查了模式和可调用的钩子,但技术上它应该只为未设置的必需选项返回false,因为其他验证器在尝试设置值时进行检查,并且您不能在设置值后添加验证器。您实际上无法设置一个无效的值,这样isValid将返回false。