警告如果您使用的是PHP 8.1或更高版本,建议您使用本机PHP代替此软件包。
我们可能会发布一些维护补丁,但否则对此软件包的支持已停产。
随意分配我们的代码并根据您的需求进行调整。
该库为PHP提供了枚举 /枚举实施。
map()方法来映射复合物。首先创建一个扩展RexlabsEnumEnum并进行以下操作的新类;
map()方法: <?php
namespace Rexlabs Enum Readme ;
use Rexlabs Enum Enum ;
/**
* Class City
*
* @package RexlabsEnumReadme
*
* @method static static BRISBANE()
* @method static static MELBOURNE()
* @method static static SYDNEY()
*/
class City extends Enum
{
const BRISBANE = ' Brisbane ' ;
const MELBOURNE = ' Melbourne ' ;
const SYDNEY = ' Sydney ' ;
// OPTIONAL - Provide a map() method if you would like to
// map additional data, which will be available from the ->value() method
public static function map (): array
{
return [
self :: BRISBANE => [ " state " => " QLD " , " population " => "" ],
self :: MELBOURNE => [ " state " => " VIC " , " population " => " 5m " ],
self :: SYDNEY => [ " state " => " NSW " , " population " => " 5m " ],
];
}
}
// Static access
echo City:: BRISBANE ; // "Brisbane"
echo City:: MELBOURNE ; // "Melbourne"
City:: names (); // (array)["BRISBANE", "BRISBANE", "SYDNEY"]
City:: keys (); // (array)["Brisbane", "Melbourne", "Sydney"]
City:: keyForName ( ' BRISBANE ' ); // "Brisbane"
City:: nameForKey ( ' Melbourne ' ); // "MELBOURNE"
City:: isValidKey ( ' Sydney ' ); // (boolean)true
City:: isValidKey ( ' Paris ' ); // (boolean)false
// Getting an instance - all return a City instance.
$ city = City:: BRISBANE ();
$ city = City:: instanceFromName ( ' BRISBANE ' );
$ city = City:: instanceFromKey ( ' Brisbane ' );
// Working with an instance
$ city -> name (); // "BRISBANE"
$ city -> key (); // "Brisbane"
$ city -> value ()[ ' population ' ]; // null - no value mapped
$ city -> is (City:: BRISBANE ); // (boolean)true
$ city -> is (City:: BRISBANE ()); // (boolean)true
$ city -> is (City:: SYDNEY ()); // (boolean)false
$ city -> isNot (City:: SYDNEY ()); // (boolean)true
$ city -> isAnyOf ([City:: BRISBANE ()]); // (boolean)true
$ city -> isNoneOf ([City:: BRISBANE ()]); // (boolean)false
// Or ...
City:: SYDNEY ()-> key (); // "Sydney"
City:: SYDNEY ()-> value (); // (array)["state"=>"NSW", "population"=>"5m"] 在项目中安装:
composer require rexlabs/enum现在,您可以将Enum对象键入依赖性:
<?php
function announceCity ( City $ city ) {
echo "{ $ city -> key ()} is located in { $ city -> value ()[ " state " ]} , population: { $ city -> value ()[ " population " ]}n" ;
}
// Get a new instance
announceCity (City:: SYDNEY ()); // "Sydney is located in NSW, population: 5m" Enum的每个实例都提供以下方法:
返回常量名称。
$ enum -> name ();返回分配给const MY_CONST = 'key'声明中常数的值/键。
$ enum -> key ();返回映射的值(如果是任何)(在map()返回的数组中)。如果没有映射值,则此方法将返回null 。
$ enum -> value ();如果此实例与给定常数密钥或枚举实例相同,则返回true。
$ enum -> is (City:: SYDNEY ); // Compare to constant key
$ enum -> is (City:: SYDNEY ()); // Compare to instance __toString()方法被定义为返回常数名称。
( string )City:: SYDNEY (); // "SYDNEY" 返回一个数组,该数组将常数键映射到值。可以选择在子类中实现此方法。默认实现返回映射到null的键数组。
返回一系列枚举实例。
返回一系列恒定键。
返回map()中定义的值数组。如果未实现map() ,则将返回一个空值的数组。
返回所有常数名称中声明的数组。
返回一个contand_name =>键的关联数组,用于类在类中声明的所有常数名称。
返回给定常数名称的键。
返回给定键的常数名称( keyForName的倒数)。
返回给定键(如map()方法中声明)的值(如果未映射(如果未映射))。
返回给定值的密钥(如map()方法中声明)。
注意:如果将重复值包含在
map()方法中,则仅将返回第一个键。
从给定的常数名称创建此枚举的实例。
从给定密钥创建此枚举的实例。
如果给定的密钥存在,则返回true。
如果在班级中声明了给定的常数名称(案例敏感),则返回为true。
如果给定密钥不存在,则抛出一个RexlabsEnumExceptionsInvalidKeyException 。
进行测试:
composer tests运行覆盖范围报告:
composer coverage覆盖报告输出到./tests/report/index.html
欢迎捐款,请提交抽拉赛或创建问题。您提交的代码应使用PSR-1/PSR-2标准进行格式。