承接 vadage/oxidize 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

vadage/oxidize

最新稳定版本:v1.0.0

Composer 安装命令:

composer require vadage/oxidize

包简介

PHP adaptation of some rust concepts

README 文档

README

PHP adaptation of some great concepts on which Rust was built.

Oxidize

Rust encourages developers to handle errors and non-values properly by design.
This leads to fewer non-logic bugs in production and the code might look cleaner as well.

The Oxidize library is written in pure PHP and has just adapted some concepts, which are also used in Rust. The method names are kept similar (snake_case to camelCase) for developers using both languages.
There are some additional wrapper methods, such as andThenContinue() in both Result and Option to get rid of return statements. A new instance will then be returned automatically.

Installation

composer require vadage/oxidize

Exceptionless

Exceptions don't have to be declared to be thrown in a method, which increases the likelihood of them not being handled.
This is where Results come in handy with their representation of Ok and Error. Calling unwrap on Error or unwrapError on Ok will lead to a ValueAccessError.

$userResult = $this->userRpc->login($email, $password);
if ($userResult->isOk()) {
    $user = $userResult->unwrap();
    $this->messages->queue(sprintf('Hello %1$s.', $user->getUsername()));
}

Null safety

It may not always be obvious if a method returns an object or null.
Instead of null, an Option can be used, which represents one of two states (Some and None). Calling unwrap on None will lead to a ValueAccessError.

$terminationDateOption = $user->getTerminationDate();
if ($terminationDateOption->isSome()) {
    $terminationDate = $terminationDateOption->unwrap();
    $this->messages->queue(sprintf('Your login will be deactivated after %1$s.', $terminationDate->format(DateTimeInterface::RSS)));
}

Monads for Result and Option

Monads can improve the codes aesthetics by getting rid of some if statements, variable declarations and unwrap calls.

$this->userRpc->login($email, $password)->andThenContinue(function (User $user) {
    $username = $user->getUsername();

    $user->getTerminationDate()
        ->andThenContinue(function (DateTime $terminationDate) {
            $formattedDate = $terminationDate->format(DateTimeInterface::RSS);
            $this->messages->queue(sprintf('Hello %1$s. Your login will be deactivated after %2$s.', $username, $formattedDate));
        })
        ->orElseContinue(function () {
            $this->messages->queue(sprintf('Hello %1$s.', $username));
        });
});

统计信息

  • 总下载量: 13
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-04-06