喜欢 Rust 的风格,写一个 PHP 的 Option 类

2018-09-12 18:16:03 +08:00
 HowToMakeLove

第一次分享东西

项目地址: https://github.com/lisqorz/option

除了这些,其实还想在里面加上 PHP 的 标准库方法,这样就可以更加函数式了

小例子

case 1

// Option
$res = Some($db->get())->expect(new \Exception("msg"));
// native
$res = $db->get();
if (is_null($res)) {
    throw new \Exception("msg");
}

case2

// Option
$_POST["hello"] = null;
Some($_POST['hello'])->unwrapOr("hi"); // hi
$_POST["hello"] = "hello";
Some($_POST['hello'])->unwrapOr("hi"); // hello

// ... but we have $_POST["hello"]??"hi" 2333

Case3

// scenario
$obj = new Obj();
$obj->attr = null; // attr is Object;
// Option

// None
$attr = Some($obj->attr)->andThen(function($attr){
	return "";
})->unwrapOr("no success");

//Some
$attr = Some(1)->andThen(function($attr){
    return null;
})->unwrapOr("no success");

// native
$attr = "no success";
if ($obj->attr) {
   $attr = (function($attr){return ""; })()
}
if (!$attr) {
    $attr = "no success";
}
1735 次点击
所在节点    程序员
1 条回复
AngelCriss
2018-09-12 18:25:21 +08:00
啥叫函数式?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/488644

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX