jonathanr / php-optional-result
1.0.6
2024-07-30 10:56 UTC
Requires
- php: >=8.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.60
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^11.2
README
此包是Rust返回响应的实现。
用法
查看示例目录
可选响应
当需要返回可能为null的值时,可以使用Option::class
带值的返回
Option::some('AnyValue')
Option::some(10)
Option::some(['one', 'two', 'three'])
您可以用任何需要的值替换参数。
无返回值
Option::none()
允许的方法
$value = Option::some('any value')
$value->isSome()
返回布尔值 $value->isNone()
返回布尔值
Get()方法
-
Get方法在返回Some时返回值
-
Get方法在返回None时抛出NoneException异常
结果响应
当需要返回一个说明过程是否成功或出现错误的对象时,可以使用Result::class
带值的返回OK
Result::ok('anyValue')
Result::ok(10)
Result::ok([1, 2, 3])
您可以用任何需要的值替换参数,也可以用Option::class
替换
带消息的返回Error
Result::err('an error occur')
Get方法
- Get方法在返回Ok时返回值
- Get方法在返回Err时返回错误值
要获取错误消息,可以使用getError()方法
示例(请参阅示例目录)
之前
/**
* @return string
*/
function askDomain(string $name): ?String
{
try {
$json = Http::get('myResolverApi?name='.$name)->json();
if (isset($json['domain']) && ($json['domain'] !== null || $json['domain'] !== '')) {
return $json['domain'];
}
return null;
} catch (HttpException) {
throw new Exception('API No respond');
}
}
function isDomainExist(string $name): string
{
try {
$result = askDomain($name);
if (!empty($result)) {
return 'domain is' . $result;
}
} catch (Exception $e) {
return '';
}
}
echo isDomainExist('goooooooooooogle');
之后
/**
* @return Ok<Some<string>|None>|Err<None>
*/
function askDomain(string $name): Ok|Err
{
try {
$json = Http::get('myResolverApi?name='.$name)->json();
if (isset($json['domain'])) {
return Result::ok(Option::some($json['domain']));
}
return Result::ok(Option::none());
} catch (HttpException) {
return Result::Err(Option::none());
}
}
function isDomainExist(string $name): string
{
$result = askDomain($name);
if ($result->isErr()) {
return 'Not sure. API not respond';
}
if ($result->isOk() && $result->get()->isSome()) {
return 'domain is'.$result->get()->isSome()->get();
}
return 'domain does not exist';
}
echo isDomainExist('goooooooooooogle');