ustream / option
0.1.0
2013-03-11 15:37 UTC
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-14 14:17:59 UTC
README
这是对Option类型的PHP实现,具有单调结构。我们认为测试文档记录了行为,尽管实现与php-option类似,但仍有重要的差异需要强调。
有apply而不是map和flatMap
我们发现,单调计算可以决定返回任意类型,必要时将其转换为Option。
Some::apply
的规则如下
- 如果返回类型不是Option,则将其包装在Some中
- 如果没有返回值(实际上返回值是null),则将其转换为None
- 如果返回类型是Option,则将其传递(与flatMap相同)
示例
包装非Option类型
$result = someMethodReturningAnOptionalString($params) ->apply( function ($result) { return $result . ' is a string!'; }) ->getOrElse('default');
无需显式返回None
$module = $dataMaybe ->apply( function ($data) { if (isset($data['moduleConfig'])) { if (count($data['moduleConfig']) == 1) { return key($data['moduleConfig']); } elseif (count($data['moduleConfig']) > 1) { return 'full'; } } } ) ->getOrElse('unknown');
有otherwise代替orElse与LazyOption
我们使用None::otherwise
作为Some::apply
的镜像。
示例
结合apply和otherwise
header( locate($_SERVER["DOCUMENT_URI"]) ->apply( function ($location) { statsdIncrement('302'); return 'Location: ' . $location; } ) ->otherwise( function () { statsdIncrement('404'); } ) ->getOrElse("HTTP/1.0 404 Not Found") );
创建一系列回退函数链
return Ustream\Option\None::create() ->otherwise($this->ustreamPicture($userId, $size)) ->otherwise($this->facebookPictureFromSession($facebookNetwork, $isSecureAccess)) ->getOrElse($this->naPicture($size));