petrknap/optional

可选的(类似于Java Platform SE 8中的,但用于PHP)

v3.1.0 2024-06-25 14:54 UTC

This package is auto-updated.

Last update: 2024-09-25 15:27:53 UTC


README

一个可能包含也可能不包含非null值的容器对象。如果存在值,则isPresent()将返回true,而get()将返回该值。

提供了依赖包含值存在与否的额外方法,例如orElse()(如果值不存在则返回默认值)和ifPresent()(如果值存在则执行代码块)。

这是一个基于值的类;对Optional实例使用身份敏感的操作(包括引用相等(==)、身份哈希码或同步)可能产生不可预测的结果,应避免使用。

-- Optional (Java Platform SE 8)

这是一个确保每个人都必须检查他们是否收到(或未收到)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许可证的约束。