florianwolters/component-core-enum

作为PHP组件的安全枚举模式。

v0.4.1 2013-06-29 12:42 UTC

This package is not auto-updated.

Last update: 2024-09-14 11:58:41 UTC


README

Build Status

FlorianWolters\Component\Core\Enum是一个简单易用的PHP组件,提供了安全枚举模式。

目录

简介

PHP脚本语言缺少一个重要的数据类型:枚举类型。

今天,随着PHP脚本语言5.4版本的推出,仍然没有对枚举类型的语言支持。只有一个从2010-05-21)提出的请求评论(RFC),建议添加枚举语言结构。

许多编程语言,例如Pascal、Modula-2、Modula-3、Ada、Haskell、C、C++和C#都有枚举类型。例如,Java通过对象实现了枚举类型(参见Java教程Java API文档)。

可以在PHP中使用int枚举模式来表示枚举类型

<?php
public const SEASON_WINTER = 0;
public const SEASON_SPRING = 1;
public const SEASON_SUMMER = 2;
public const SEASON_FALL = 3;

int枚举模式有许多(严重的)问题,例如

  • 不安全 - 由于季节只是一个int,你可以将任何其他int值传递到需要季节的地方,或者将两个季节相加(这是没有意义的)。
  • 没有命名空间 - 你必须使用字符串(在这种情况下为SEASON_)前缀int枚举的常量,以避免与其他int枚举类型冲突。
  • 脆弱 - 因为int枚举是编译时常量,它们被编译进使用它们的客户端。如果在两个现有常量之间添加了新常量或改变了顺序,客户端必须重新编译。如果不这样做,它们仍然可以运行,但它们的行性行为将是未定义的。
  • 打印的值没有信息 - 因为它们只是ints,如果你打印出一个,你只会得到一个数字,这告诉你什么都没有,甚至不知道它代表什么,或是什么类型。

可以通过使用安全枚举模式来解决这个问题(参见有效的Java第21项)。这个模式也有它自己的问题:它相当冗长,因此容易出错,并且它的枚举常量不能在switch语句中使用。

(cf. Oracle. Enums)

动机

由于PHP中没有枚举类型,我决定创建自己的实现。

我的解决方案实现了安全枚举模式。这个模式已经被适应和抽象化,以适应PHP。因此,我的实现没有原始安全枚举模式的问题(见上面的简介

  • 枚举常量可以在switch语句中使用(Java 1.5中不可能做到这一点)。
  • 与原始实现相比,它不那么冗长(见下文使用方法),因此出错的可能性更小。

特性

FlorianWolters\Component\Core\Enum (并且不会)具备以下功能

  • 枚举类的生成。
  • 对PHP版本 <= 5.4 的支持。

要求

使用

最重要的使用规则

始终将获取枚举常量的方法声明为final public static,并将方法名称写成大写字母。

在使用FlorianWolters\Component\Core\Enum时,应遵循以下最佳实践

  • 除非枚举类应由另一个枚举类扩展,否则始终将枚举类声明为final
  • 始终在每个获取枚举常量的方法中添加一个带有枚举类名称的DocBlock标签@return。这将在集成开发环境(IDE)中启用自动完成。
  • 始终将后缀Enum添加到表示枚举类型的类的名称中。这与在PSR-2中描述的接口和抽象类的命名约定类似。

以下资源包含更多信息

  • 点击这里访问FlorianWolters\Component\Core\Enum的Wiki。Wiki的使用部分包含多个已记录的源代码示例。
  • 点击这里访问FlorianWolters\Component\Core\Enum的API文档。

安装

本地安装

应使用依赖管理器Composer安装FlorianWolters\Component\Core\Enum。可以使用PHP安装Composer

php -r "eval('?>'.file_get_contents('http://getcomposer.org/installer'));"

这将检查一些PHP设置,然后将composer.phar下载到您的当前工作目录。此文件是Composer的二进制文件。它是一个PHAR(PHP存档),是一种PHP存档格式,可以在命令行中运行,以及其他一些用途。

接下来,运行install命令以解析和下载依赖项

php composer.phar install

全局安装

应使用PEAR安装程序安装FlorianWolters\Component\Core\Enum。此安装程序是PHP社区为安装PHP组件的既定标准。

pear channel-discover http://pear.florianwolters.de
pear install --alldeps fw/Enum

作为组件依赖

Composer

如果您正在创建一个依赖 FlorianWolters\Component\Core\Enum 的组件,请确保将 FlorianWolters\Component\Core\Enum 添加到组件的 composer.json 文件中

{
    "require": {
        "florianwolters/component-core-enum": "0.4.*"
    }
}

PEAR

如果您正在创建一个依赖 FlorianWolters\Component\Core\Enum 的组件,请确保将 FlorianWolters\Component\Core\Enum 添加到组件的 package.xml 文件中

<dependencies>
  <required>
    <package>
      <name>Enum</name>
      <channel>http://pear.florianwolters.de</channel>
      <min>0.4.0</min>
      <max>0.4.99</max>
    </package>
  </required>
</dependencies>

开发环境

如果您想对该组件进行修补或增强,您需要创建一个合适的发展环境。最简单的方法是安装 phix4componentdev

# phix4componentdev
pear channel-discover pear.phix-project.org
pear install phix/phix4componentdev

然后,克隆 Git 仓库

# PHP-Component-Core-Enum
git clone https://github.com/florianwolters/PHP-Component-Core-Enum

然后,安装该组件依赖的本地副本以完成开发环境

# build vendor/ folder
phing build-vendor

为了使您的生活更轻松,常用的任务(例如运行单元测试、生成代码审查分析以及创建 PEAR 软件包)已通过 phing 自动化。您可以在组件附带的 build.xml 文件中找到这些自动化步骤。

在组件的顶级文件夹中运行 phing 命令以查看可用的完整自动化任务列表。

许可

本程序是免费软件:您可以按照自由软件基金会发布的 GNU 较小通用公共许可证的条款重新分发和/或修改它,许可证版本为 3 或(根据您选择)更高版本。

本程序分发时希望对您有用,但没有任何保证;甚至没有关于其可销售性或适合特定用途的暗示保证。有关详细信息,请参阅 GNU 较小通用公共许可证。

您应已收到随此程序一起提供的 GNU 较小通用公共许可证副本。如果没有,请参阅 http://gnu.org/licenses/lgpl.txt