jjware / option
PHP Option 累加类型
1.1.0
2018-05-31 20:42 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: ^6.5
This package is not auto-updated.
Last update: 2024-09-15 05:18:25 UTC
README
PHP 的 Option 累加类型
入门
composer require jjware/option
创建
类 Option
位于命名空间 JJWare\Utils\Option
您可以通过调用静态方法 some
创建一个 Option
$opt = Option::some('example value');
如果您有一个可能包含 null
值的变量,您可以使用静态方法 nullable
$opt = Option::nullable($value);
如果您有一个需要返回空值的情况,您可以使用静态方法 none
$opt = Option::none();
用法
一旦您有了 Option
,您可以对它执行许多操作。
假设我们有一个可能返回或不返回值的功能
function getSetting(string $setting) : Option { // Try to find the setting if it exists... return Option::nullable($result); }
如果您的 Option
为空,您可以在其中提供一个默认值
$port = getSetting('port')->getOrElse(8080);
如果您的默认值需要昂贵的计算或调用外部资源,您可能只想在必要时获取默认值
$port = getSetting('port')->getOrElseGet(function () use ($db) { return $db->getDefaultPortFromDatabase(); }); // or using an instance method reference $port = getSetting('port')->getOrElseGet([$db, 'getDefaultPortFromDatabase']);
没有值可能对您来说是一个异常情况
$port = getSetting('port')->getOrThrow(function () { return new UnderflowException("setting does not exist"); });
如果存在,您可能需要以某种方式更改 Option
内的值
$port = getSetting('port')->map(function ($x) { return intval($x); })->getOrElse(8080); // or using a function reference $port = getSetting('port')->map('intval')->getOrElse(8080);
您可能需要映射到完全不同的 Option
$scheme = getSetting('port')->flatMap(function ($x) { return getSchemeForPort($x); })->getOrElse('http'); // or as a function reference $scheme = getSetting('port')->flatMap('getSchemeForPort')->getOrElse('http');
除非它符合特定标准,否则您可能不想要值
$port = getSetting('port')->filter(function ($x) { return $x >= 1024 && $x <= 49151; })->getOrElse(8080); // or using a static method reference $port = getSetting('port')->filter('Filters::registeredPort')->getOrElse(8080);
假设您需要测试值是否存在
$port = getSetting('port'); if (!$port->isSome()) { $log->debug("port setting empty"); throw new InvalidArgumentException("port not provided"); }