noini/optional

用于各种if-null-else目的的可选类

1.1.0 2018-05-14 18:27 UTC

This package is not auto-updated.

Last update: 2024-09-23 23:45:10 UTC


README

Optional是一个多用途工具,用于减少PHP代码中的if-null检查。

安装

通过composer安装

composer require noini/optional

使用

静态创建

Optional::create($payload)->then(...);

函数

optional($payload)->then(...);

简单示例

以下示例将调用可调用函数,因为$content的值不是null。

$payload = "content string";
$optional = new Optional($payload);
$optional->then(function($data) {
    echo "Had content: " . $data;
})->otherwise(function($data) {
    echo "I had null value";
});

has()

has()方法可用于检查Optional有效负载是否符合要求。

空有效负载

如果Optional有效负载为null,则has()将失败并创建错误结果。

optional(null)->has(1)->getResult(); // false

如果需要,可以使用类型进行检查

optional(null)->has(Noini\Optional\Helpers\Types::NULL)->getResult(); // true

使用严格相等比较

将有效负载与has()参数进行比较。

optional(50)->has(50)->getResult(); // true
optional("50")->has(50)->getResult(); // false

使用类型检查

可以使用Types类常量来检查有效负载数据类型是否符合要求。

optional("50")->has(Noini\Optional\Helpers\Types::INTEGER)->getResult(); // false
optional("50")->has(Noini\Optional\Helpers\Types::STRING)->getResult(); // true

类检查

传递类将检查有效负载是否是给定类的实例。

optional(new \stdClass())->has(\stdClass::class)->getResult(); // true;

使用回调

使用回调进行自定义有效负载检查。回调必须返回布尔值。

optional(50)->has(function($data) {
    return $data > 10;
})->then(function($data) {
    echo "Value is over 10";
});

then()

如果Optional的新实例具有非null值,则将调用回调函数。

optional(1)->then(function($data) {
    echo "I had non null value: " . $data;
});

then()可以通过提供可调用函数在构造函数中调用。

optional(50, function($data) {
    echo "Having non null value: " . $data;
});

与has()方法链式使用then()将仅在最新的has()比较成功时调用可调用函数。

optional(50)
    ->has(Types::INTEGER)
    ->then(function($data) {
        echo "Data is a integer";
    });

otherwise()

如果最新的has比较失败,则将调用回调。

optional(50)
    ->has(function($data) {
        return $data > 9000;
    })->otherwise(function($data) {
        echo "Data was not over 9000";
    });

if-else

has-then方法链也可以与if()方法一起使用。if()应包含条件回调函数。

optional("data")->if(Types::STRING, function($data) {
    echo "I had a string value: " . $data;
});

使用与if()链式连接的else()方法

optional(null)
    ->if(Types::STRING, function($data) {
        echo "I should not be called this time";
    })
    ->else(function($data) {
        echo "This means optional payload was not a string";
    });

注意 has-then不能在if之后使用。