dreamscapes/enumeration

该软件包已被弃用且不再维护。未建议替代软件包。

为 PHP 提供简单 Typedef Enum 实现

1.0.0 2014-10-14 18:43 UTC

This package is not auto-updated.

Last update: 2024-01-15 22:40:58 UTC


README

Build Status Coverage Status Dependency Status

每个 PHP 程序员在某个时候都希望在他们的代码中为所有定义的常量添加一些结构。通常,人们会将这些常量放在一个专门的类中,但这仅此而已;没有任何额外功能,没有真正的好处,什么都没有。

如果你能获得更多呢?

这个小型库旨在为您的“枚举”提供额外的功能——一组代表您代码中某些有意义内容的静态值。

常量的问题

假设我们的程序将处理动物——各种不同的动物,我们希望每种动物类型都有一个独特的值(我在这个例子中完全编造了)。这是许多程序员目前所做的事情

define('MYAPP_ANIMAL_HORSE', 0);
define('MYAPP_ANIMAL_DOG', 1);
define('MYAPP_ANIMAL_CAT', 2);
// ...

虽然这确实有效,但定义这些值还有更好的方法。

namespace MyApp;

class Animal
{
  const Horse = 0;
  const Dog = 1;
  const Cat = 2;
}

将常量定义为类有几个优点

  1. 您可以使用真正的命名空间,这可以在使用类时节省一些输入
  2. 使用 Animal::Horse 比使用 MYAPP_ANIMAL_HORSE 感觉更自然
  3. 由于它是一个类,它开辟了新的可能性——这就是这个库的作用所在:)

这个库是如何帮助的

上面的例子中使用了类,引入了一些问题,但也开辟了新的可能性。

  1. 没有什么可以阻止程序员实例化这个类
  2. 如果你想反其道而行之呢?——你有一个值,你想要知道在枚举中包含此值的常量的名称?
  3. 如果你想检查常量是否在枚举中定义?
  4. 如果你想在一个函数/方法参数列表中为枚举值进行类型提示?

让我们看看另一个例子,它演示了此库提供的 枚举 的用法。

namespace MyApp;

// Let's extend our Enumeration class
class Animal extends \Dreamscapes\Enumeration
{
  const Horse = 0;
  const Dog = 1;
  const Cat = 2;
}

// So far looks the same, but watch now...

$animal = new Animal; // Raises fatal error (private constructor)

Animal::isDefined('Horse'); // Returns (bool)true
Animal::isDefined('Cow'); // Returns (bool)false

// "Reverse resolution"
$value = Animal::Dog;
echo Animal::getName($value); // prints (string)"Dog"

// Type-hinting
function doSomething(Animal $animal)
{
  // $animal is now an instance of the Animal class
  // that can be easily represented as string
  echo $animal;
}
doSomething(Animal::Horse()); // prints (string)"Horse"

// To get the actual value
$value = $animal->value();
// Or, use the Enumeration::getValue() class method
$value = Animal::getValue($animal);

正如你所看到的,突然之间,你可以用如此简单的枚举类做更多的事情。在 API 文档 中了解更多信息,它还包括代码示例和完整方法描述。

语义方法

枚举包含几个语义命名的您可以使用的方法,通过查看代码即可理解其代码。

考虑以下示例

if (Animal::defines('Horse')) {
  // Animal::Horse is defined!
}

echo Animal::withValue(0); // Horse

还有更多方法可供使用——务必查看 API 文档

安装

通过 Composer

composer require dreamscapes\enumeration:dev-master

Composer 的自动加载得到支持,所以只要你在代码中的某个地方包含了 require "vendor/autoload.php";,你就可以开始使用它。

文档

API 文档 在线可用——它包括您可以使用的所有公共方法,以及一些代码示例和用例。

离线文档

当然可以!只需安装开发依赖并生成文档。

composer require --dev dreamscapes\enumeration:dev-master
php vendor/bin/phpdoc.php

文档现在可在 ./docs/index.html 中找到。

许可证

本软件采用 BSD(3条款)许可证 授权。更多信息请参阅 LICENSE 文件。