silasyudi/optional

Java 的 java.util.Optional 类的可移植性到 PHP。

v2.0.0 2022-05-14 19:17 UTC

This package is auto-updated.

Last update: 2024-09-15 01:25:16 UTC


README

Tests Maintainability Test Coverage

Java 的 java.util.Optional 类的可移植性到 PHP,并更新了 Java 11 的特性。

摘要

语言 / Idioma

阅读葡萄牙语版本 🇧🇷 这里.

安装

composer require silasyudi/optional

需求

  • PHP 7.4+
  • Composer

特性

Optional 类封装了一个值,并可以对其进行各种操作。

无 Optional 的示例

    /** @var Entity|null $entity */
    $entity = $this->repository->find($id);

    if (!$entity) {
        throw new SomeException();
    }

    ...

有 Optional 的示例

    /** @var SilasYudi\Optional $optional */
    $optional = $this->repository->find($id);
    $entity = $optional->orElseThrow(new SomeException());
    ...

差异

由于每种语言的特定性,一些差异无法避免。以下列出了最重要的差异:

  • Java 的 Optional.stream() 没有导入此包,因为在 PHP 中没有类似的功能,并且已经具有类似的 mapflatMapfilter 方法。
  • Optional.hashCode() 没有导入此包。
  • Java 的 NullPointerExceptionNoSuchElementException 被替换为当 Optional 对象不能为空时为 OptionalInvalidStateException,在尝试将 null 传递到 callable 参数时为 TypeError
  • Java 11 中的 Optional.orElseThrow 是重载的,并期望没有参数或一个 Supplier 参数。在此包中,此方法期望一个 Throwable 对象或 null 作为参数。
  • ConsumerFunctionPredicateSupplier 作为 callable 导入。