mareg / either
该软件包最新版本(0.2.4)没有可用的许可信息。
0.2.4
2017-03-01 15:50 UTC
Requires
- mareg/map: 0.1.*
- mareg/option: 0.2.*
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-21 20:43:44 UTC
README
这是一个强类型可组合的替代异常和返回错误码或合理值的函数。
约定是Left
代表错误值,而Right
代表成功值。
<?php use PlasmaConduit\either\Left; use PlasmaConduit\either\Right; use PlasmaConduit\option\Some; use PlasmaConduit\option\None; function loadNews() { $connection = PsuedoDB::connect(); if (!$connection) { return new Left("Failed connection to DB"); } $news = $connection->get("latestNews"); if ($news) { return new Right($news); } else { return new Left("Failed reading latest news"); } } $news = loadNews()->fold( function($failMessage) { PsudeoLogger::log($failMessage); return new None(); }, function($news) { return new Some($news); } )->getOrElse("No news at the moment, please check back later.");
文档
此库实现了一个名为Left
和Right
的类,它们都实现了Either
接口。以下为Either
接口的说明:
<?php namespace PlasmaConduit\either; interface Either { /** * Returns true if this `Either` type is `Left`, false otherwise * * @return {Boolean} */ public function isLeft(); /** * Returns true if this `Either` type is `Right`, false otherwise * * @return {Boolean} */ public function isRight(); /** * This function takes two callable types as it's arguments and it will * only call one of them. If this `Either` type is `Left` it calls * `$leftCase` with the left value. If this is the `Right` type it calls * the `$rightCase` with the right value. * * @param {callable} $leftCase - Callable for left case * @param {callable} $rightCase - Callable for right case * @return {Any} - Whatever the ran case returns */ public function fold($leftCase, $rightCase); /** * Returns an `Option` projection of the `Left` value of this `Either` type. * So if this is type `Left` it returns `Some($value)` but if this is * `Right` it returns `None` * * @return {PlasmaConduit\option\Option} */ public function left(); /** * Returns an `Option` projection of the `Right` value of this `Either` * type. So if this is type `Right` it returns `Some($value)` but if this is * `Left` it returns `None` * * @return {PlasmaConduit\option\Option} */ public function right(); /** * Returns the `Either` type as the opposite side. `Left` returns `Right` * and vice versa. * * @return {Either} */ public function swap(); }