警告如果您使用的是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標准進行格式。