定制 fangx/php-enum 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

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

fangx/php-enum

Composer 安装命令:

composer require fangx/php-enum

包简介

php enum generator

关键字:

README 文档

README

Install

Via Composer

composer require fangx/php-enum

Usage

使用 ./vendor/bin/enum 命令创建一个枚举类.

./vendor/bin/enum FooEnum --enum="1=foo" --enum="b=bar" --path=Enums

该命令默认在 当前目录的 Enums 目录下创建一个 FooEnum.php 文件. 文件内容如下:

<?php
namespace Enums;

use Fangx\Enum\AbstractEnum;

class FooEnum extends AbstractEnum
{
    const FOO = "f", __FOO = "foo";
    const BAR = "b", __BAR = "bar";
}

枚举类默认继承 \Fangx\Enum\AbstractEnum. 可以静态调用以下方法:

  • toArray(Format $format = null, Filter $filter = null)
  • toJson(Format $format = null, Filter $filter = null)
  • desc($key, $default = 'Undefined')

获取所有的枚举值

<?php

class FooEnum extends \Fangx\Enum\AbstractEnum
{
    const FOO = 'f', __FOO = 'foo';
    const BAR = 'b', __BAR = 'bar';
}

/**
 * ['f' => 'foo', 'b' => 'bar']
 */
FooEnum::toArray();

获取枚举值的描述信息

<?php

class FooEnum extends \Fangx\Enum\AbstractEnum
{
    const FOO = 'f', __FOO = 'foo';
    const BAR = 'b', __BAR = 'bar';
}

/**
 * "foo"
 */
FooEnum::desc('f');

/**
 * "bar"
 */
FooEnum::desc('b');

使用格式来约束返回值

<?php
class FooFormat implements \Fangx\Enum\Contracts\Format
{
    public function parse(\Fangx\Enum\Contracts\Definition $definition): array
    {
        return [['key' => $definition->getKey() , 'value' => $definition->getValue()]];
    }
}

class FooEnum extends \Fangx\Enum\AbstractEnum
{
    const FOO = 'f', __FOO = 'foo';
    const BAR = 'b', __BAR = 'bar';
}

/**
 * [['key' => 'f', 'value' => 'foo'], ['key' => 'b', 'value' => 'bar'],]
 */
$format = new FooFormat();
FooEnum::toArray($format);

通过规则来过来过滤枚举值. 当 __invoke 返回 true 时, 该值将会在结果中被剔除

支持设置多个过滤规则, FooEnum::toArray(null, $filter1, $filter2, $filter3);

class FooFilter implements \Fangx\Enum\Contracts\Filter
{
    public function __invoke(\Fangx\Enum\Contracts\Definition $definition)
    {
        return $definition->getKey() !== 'f';
    }
}

/**
 * ['f' => 'foo']
 */
$fooFilter = new FooFilter();
$barFilter = new BarFilter();
FooEnum::toArray(null, $fooFilter, $barFilter);
FooEnum::addFilter($fooFilter)->addFilter($barFilter)->toArray(); # ^1.3

使用自定义的集合来作为所有的枚举类型, 其他使用方法与 FooEnum 一致.

<?php
class BarEnum extends \Fangx\Enum\AbstractEnum
{
    public function all()
    {
        return [
            new \Fangx\Enum\Definition('f', 'foo'),
            new \Fangx\Enum\Definition('b', 'bar'),
        ];
    }
}

v1.2 起, 支持设置默认的 filtersformat

设置默认的过滤器

<?php
declare(strict_types=1);

namespace Fangx\Tests\Stubs;

use Fangx\Enum\WithoutDefault;

class HasDefaultFiltersEnum extends ExampleEnum
{
    public function filters()
    {
        return [
            new WithoutDefault(),
            new WithoutDefault('unknown'),
        ];
    }
}

设置默认的格式

<?php
declare(strict_types=1);

namespace Fangx\Tests\Stubs;

use Fangx\Enum\Contracts\Format;

class HasDefaultFormatEnum extends ExampleEnum
{
    public function format(): ?Format
    {
        return new CustomFormat();
    }
}

Test

composer test

fangx/php-enum 适用场景与选型建议

fangx/php-enum 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.47k 次下载、GitHub Stars 达 2, 最近一次更新时间为 2020 年 06 月 16 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「php」 「enum」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 fangx/php-enum 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 fangx/php-enum 我们能提供哪些服务?
定制开发 / 二次开发

基于 fangx/php-enum 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-06-16