petrknap / optional
可选的(类似于Java Platform SE 8中的,但用于PHP)
v3.1.0
2024-06-25 14:54 UTC
Requires
- php: >=8.1
Requires (Dev)
- nunomaduro/phpinsights: ^2.11
- petrknap/shorts: ^2.1
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.7
README
一个可能包含也可能不包含非null值的容器对象。如果存在值,则
isPresent()
将返回true
,而get()
将返回该值。提供了依赖包含值存在与否的额外方法,例如
orElse()
(如果值不存在则返回默认值)和ifPresent()
(如果值存在则执行代码块)。这是一个基于值的类;对Optional实例使用身份敏感的操作(包括引用相等(==)、身份哈希码或同步)可能产生不可预测的结果,应避免使用。
这是一个确保每个人都必须检查他们是否收到(或未收到)null
的简单方法。
示例
namespace PetrKnap\Optional; /** @var Optional<string> $optionalString */ $optionalString = Optional::of('data'); if ($optionalString->isPresent()) { echo $optionalString->get(); } OptionalResource::ofFalsable(tmpfile())->ifPresent(function ($tmpFile): void { fwrite($tmpFile, 'data'); fclose($tmpFile); });
创建和使用自己的类型化可选
namespace PetrKnap\Optional; class YourClass {} /** * @extends OptionalObject<YourClass> */ class YourOptional extends OptionalObject { protected static function getInstanceOf(): string { return YourClass::class; } } TypedOptional::register(YourOptional::class); // optional recommended step function your_strong_typed_function(YourOptional $input): YourOptional { return YourOptional::empty(); } /** * @param Optional<YourClass> $input * @return Optional<YourClass> */ function your_weak_typed_function(Optional $input): Optional { return YourOptional::empty(); }
运行composer require petrknap/optional
来安装。您可以通过捐赠来支持此项目。该项目受LGPL-3.0-or-later许可证的约束。