noini / optional
用于各种if-null-else目的的可选类
1.1.0
2018-05-14 18:27 UTC
Requires
- php: ^7.1
Requires (Dev)
- phpunit/phpunit: ^6.5
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之后使用。