PHP Option object like a Rust Option type.
It will work with both PHP 7.x and PHP 8.x.
Tested with the following PHP versions
- 7.0
- 7.1
- 7.2
- 7.3
- 7.4
- 8.0
- 8.1
- 8.2
composer require aharisu/option
// make some object
$some = some(1);
// make none object
$none = none();
if ($some->isSome()) {
$v = $some->unwrap();
}
if ($none->isNone()) {
//do something
}
if (null != $v = $some->tryUnwrap()) {
//do something
print_r($v);
}
$some->someThen(function ($v) {
//do something
print_r($v);
});
$v2 = $none->unwrapOr(2);
$k = 10;
$v3 = $none->unwrapOrElse(fn () => 2 * $k);
// true
if (some(1)->equals(1)) {
}
if (some(1)->equals(some(1))) {
}
// false
if (none()->equals(null)) {
}
// false and type mismatch warning
if (some(1)->equals(1.0)) {
}
// false and type mismatch warning
if (some(1)->equals('1')) {
}
use aharisu\Option;
class ValueType
{
/**
* @param Option<string> $text
* @param Option<int> $value
*/
public function __construct(
public readonly int $id,
public readonly Option $text,
public readonly Option $value,
) {
}
}
new ValueType(
1,
toOption('text'), //some
toOption(null), //none
);
Apache 2.0 & MIT