plasmaconduit / either
此包已被弃用,不再维护。未建议替代包。
此包的最新版本(0.2.2)没有可用的许可证信息。
0.2.2
2013-07-13 18:27 UTC
Requires
- plasmaconduit/map: 0.1.*
- plasmaconduit/option: 0.2.*
Requires (Dev)
This package is not auto-updated.
Last update: 2016-11-19 07:19:37 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(); }