Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/silasyudi/optional

Portability of Java's java.util.Optional<T> class to PHP, updated with Java 11 features
https://github.com/silasyudi/optional

library optional php

Last synced: about 1 month ago
JSON representation

Portability of Java's java.util.Optional<T> class to PHP, updated with Java 11 features

Awesome Lists containing this project

README

        

# Optional

[![Tests](https://github.com/silasyudi/optional/actions/workflows/tests.yml/badge.svg)](https://github.com/silasyudi/optional/actions/workflows/tests.yml)
[![Maintainability](https://api.codeclimate.com/v1/badges/22aefd9a146abde68afd/maintainability)](https://codeclimate.com/github/silasyudi/optional/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/22aefd9a146abde68afd/test_coverage)](https://codeclimate.com/github/silasyudi/optional/test_coverage)

Portability of Java's `java.util.Optional` class to PHP, updated with Java 11 features.

## Summary
- [Language / Idioma](#language--idioma)
- [Instalation](#instalation)
- [Requirements](#requirements)
- [Features](#features)
- [Differences](#differences)

## Language / Idioma

Leia a versão em português :brazil: [aqui](README_PT_BR.md).

## Instalation

```sh
composer require silasyudi/optional
```

## Requirements

- PHP 7.4+
- Composer

## Features

The Optional class encapsulates a value and can perform various operations on it.

### Example without Optional:

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

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

...
```

### Example with Optional:

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

## Differences

Some differences could not be avoided due to the particularities of each language. The most important are listed below:

* `Optional.stream()` of the Java was not imported into this package, as it doesn't have something similar in PHP and
already has similar methods in `map`, `flatMap` and `filter`.
* `Optional.hashCode()` was not imported into this package.
* `NullPointerException` e `NoSuchElementException` of the Java was replaced by `OptionalInvalidStateException`
when the Optional object cannot be empty and `TypeError` when attempting to pass null in `callable` parameters.
* `Optional.orElseThrow` in Java 11 is overloaded, and expects no parameter or a Supplier parameter.
In this package, this method expects a Throwable object or `null` as parameter.
* `Consumer`, `Function`, `Predicate` and `Supplier` was imported as `callable`.