美文网首页PHPPHP经验分享PHP实战
php 自己实现Enum 枚举类,并且实现then 匹配回调

php 自己实现Enum 枚举类,并且实现then 匹配回调

作者: Renew全栈工程师 | 来源:发表于2021-07-19 02:32 被阅读0次

因为php没有自己的enum

如果要实现
就要三方扩展,如 SPL_Types
需要pecl 或者自己编译安装,不是很方便
或者通过composer 引入第三方库
用法跟下面相似

查看 github 源代码

1.直接通过 composer 引入到项目

composer require wgx954418992/php-enum

2.调用

<?php

use enum\classier\Enum;

require '../vendor/autoload.php';

/**
 * Class OrderStatus
 * 
 * @warning `常量值不能重复`
 */
class OrderStatus extends Enum
{

    /**
     * 订单状态 待支付
     */
    public const WAIT_PAY = 'WAIT_PAY';

    /**
     * 订单状态 已支付
     */
    public const PAYED = 'PAYED';

    /**
     * 订单状态 配送中
     */
    public const DELIVERING = 'DELIVERING';

    /**
     * 订单状态 已完成
     */
    public const COMPLETE = 'COMPLETE';

    /**
     * 订单状态 已评论
     */
    public const COMMENTED = 'COMMENTED';

    /**
     * 获取常量`WAIT_PAY`的实际值,它将在构造时调用,以后不会再调用,并且优先级高于静态属性
     */
    protected function getWaitPay()
    {
        return new class {

            /**
             * @var string
             */
            private $text = "待支付";

            /**
             * @return string
             */
            public function getText(): string
            {
                return $this->text;
            }
        };
    }

    /**
     * 常量 PAYED 实际值
     * @var string[]
     */
    protected static $_PAYED = ['text' => '已支付'];
}

try {
    $status = new OrderStatus(OrderStatus::WAIT_PAY);

    echo "name: {$status->getName()}" . PHP_EOL;

    echo "value:" . PHP_EOL;

    print_r($status->getValue());

    echo PHP_EOL;

    $status->then(OrderStatus::WAIT_PAY, OrderStatus::PAYED, function () {
        echo '命中 WAIT_PAY,PAYED' . PHP_EOL;
    })
        ->then(OrderStatus::DELIVERING, function () {
            echo '命中 DELIVERING' . PHP_EOL;
        })
        ->then(OrderStatus::COMPLETE, function () {
            echo '命中 COMPLETE' . PHP_EOL;
        })
        ->then(OrderStatus::COMMENTED, function () {
            echo '命中 COMMENTED' . PHP_EOL;
        })
        ->fetch();
} catch (Exception $e) {
    exit($e->getMessage());
}

相关文章

  • php 自己实现Enum 枚举类,并且实现then 匹配回调

    因为php没有自己的enum 如果要实现就要三方扩展,如 SPL_Types需要pecl 或者自己编译安装,不是很...

  • 8.枚举和注解

    一、枚举 枚举的二种实现方式: 自定义类实现枚举 使用 enum 关键字实现枚举 自定义类实现枚举: 不需要提供s...

  • 枚举

    一、概念: 实例有限而且固定的类,在java里被称为枚举类。 二、通过enum实现枚举类 使用enum定义的枚举类...

  • Java并发 | 单例的其他实现

    单例模式 静态内置类实现 使用static代码块实现 使用enum枚举实现

  • 单例模式

    饿汉 双检索 枚举 根据枚举的实现原理是是继承enum接口的类,每个元素是static final的,所以枚举实现...

  • Java篇-枚举的使用

    一 : 自定义枚举类 枚举类调用 二 : 使用enum关键字定义枚举类 让枚举类实现接口: 可以让不同的枚举类的对...

  • Java Enum的七种用法

    枚举 枚举是由class来实现的(继承Enum类,所以不能再继承其他类,也不能被继承,但是可用来实现接口)。因此由...

  • Java枚举(二)

    枚举可以实现接口 enum 可以像一般类一样实现接口。 同样是实现上一节中的错误码枚举类,通过实现接口,可以约束它...

  • 枚举--java24(02/17/2016)

    如何自定义枚举类如何使用enum定义枚举类、枚举类的主要方法实现接口的枚举类 JDK1.5之前需要自定义枚举类JD...

  • <转> 通过枚举 enum 来实现单例模式

    转自:通过枚举 enum 来实现单例模式 枚举 通过enum关键字来实现枚举,在枚举中需要注意的有: 枚举中的属性...

网友评论

    本文标题:php 自己实现Enum 枚举类,并且实现then 匹配回调

    本文链接:https://www.haomeiwen.com/subject/fwhfmltx.html