W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
枚舉類型是標(biāo)量類型的,但是它們?cè)谝恍┓矫嫦駥?duì)象一樣。首先,它們是名稱空間的。其次,像訪問類常量一樣訪問枚舉成員的值。第三,每個(gè)枚舉有6個(gè)靜態(tài)函數(shù)可用。
assert()需要一個(gè)值,試圖將其轉(zhuǎn)換為底層的枚舉類型。如果可以,則返回鑄造值(例如,枚舉名稱的類型); 否則會(huì)拋出一個(gè)UnexpectedValueException。
<?hh
namespace Hack\UserDocumentation\API\Enums\AssertFunc;
enum Day: int {
SUNDAY = 1;
MONDAY = 2;
TUESDAY = 3;
WEDNESDAY = 4;
THURSDAY = 5;
FRIDAY = 6;
SATURDAY = 7;
}
class MyCalendar {
public static function get_next_day_int(int $day): Day {
if ($day > 0 && $day < 8) {
// We know that $day is in the enum value range, so we can assert that
// we are converting to one that exists.
return self::get_next_day(Day::assert($day));
}
return Day::SUNDAY;
}
public static function get_next_day(Day $day): Day {
// assert here two since we want to cast to add the days
return $day !== Day::SATURDAY ? Day::assert((int) $day + 1) : Day::SUNDAY;
}
}
var_dump(MyCalendar::get_next_day_int(4)); // int(5)
var_dump(MyCalendar::get_next_day(Day::SATURDAY)); // int(1)
Output
int(5)
int(1)
這個(gè)例子展示了如何用assert()Day枚舉成員的值給定它的基礎(chǔ)類型的值int。由于有一個(gè)檢查,確保所提供的int是在適當(dāng)?shù)姆秶鷥?nèi),我們可以確信,我們不會(huì)得到一個(gè)運(yùn)行時(shí)異常使用枚舉中不存在的值。
assertAll()需要一個(gè)值的容器,試圖將每個(gè)值轉(zhuǎn)換為基礎(chǔ)的枚舉類型。如果它可以為所有的值,它返回一個(gè)casted值的容器; 否則會(huì)拋出一個(gè)UnexpectedValueException。
<?hh
namespace Hack\UserDocumentation\API\Enums\AssertAllFunc;
enum Day: int {
SUNDAY = 1;
MONDAY = 2;
TUESDAY = 3;
WEDNESDAY = 4;
THURSDAY = 5;
FRIDAY = 6;
SATURDAY = 7;
}
class MyCalendar {
public static function get_latest_day_int(Vector<int> $days): Day {
if (min($days) > 0 && max($days) < 8) {
// We know that all values in $days are in the enum value range,
// so we can assert that we are converting to one that exists.
// assertAll returns a Container, so make sure to create a new
// Vector from it.
return self::get_latest_day(new Vector(Day::assertAll($days)));
}
return Day::SUNDAY;
}
public static function get_latest_day(Vector<Day> $days): Day {
return max($days);
}
}
var_dump(MyCalendar::get_latest_day_int(Vector {4, 6, 3})); // int(6)
var_dump(MyCalendar::get_latest_day(
Vector {Day::WEDNESDAY, Day::SATURDAY})
); // int(7)
Output
int(6)
int(7)
這個(gè)例子展示了如何assertAll()使用Day枚舉成員的值來獲取Vector它的基礎(chǔ)類型int。由于有一個(gè)檢查,確保所提供的ints在Vector適當(dāng)?shù)姆秶鷥?nèi),我們可以確信,我們將不會(huì)得到一個(gè)運(yùn)行時(shí)異常使用枚舉中不存在的值。
請(qǐng)注意,assertAll()返回一個(gè)Container(這是一個(gè)孩子Traversable,所以為了我們需要?jiǎng)?chuàng)建一個(gè)新Vector的,Container并傳遞給它get_latest_day()。
與類似assert(),但不是拋出一個(gè)異常,當(dāng)轉(zhuǎn)換不能發(fā)生時(shí),它返回null。
<?hh
namespace Hack\UserDocumentation\API\Enums\Coerce;
enum Day: int {
SUNDAY = 1;
MONDAY = 2;
TUESDAY = 3;
WEDNESDAY = 4;
THURSDAY = 5;
FRIDAY = 6;
SATURDAY = 7;
}
class MyCalendar {
public static function get_next_day_int(int $day): ?Day {
// coerce will return null if the underlying type value isn't an enum
// member value
$coerced = Day::coerce($day);
return $coerced ? self::get_next_day($coerced) : null;
}
public static function get_next_day(Day $day): ?Day {
// assert here two since we want to cast to add the days
return $day !== Day::SATURDAY ? Day::assert((int) $day + 1) : Day::SUNDAY;
}
}
var_dump(MyCalendar::get_next_day_int(4)); // int(5)
var_dump(MyCalendar::get_next_day(Day::SATURDAY)); // int(1)
Output
int(5)
int(1)
這個(gè)例子展示了如何用coerce()Day枚舉成員的值給定它的基礎(chǔ)類型的值int。既然coerce()返回,null如果給定int不是枚舉的成員值Day,我們只是返回null,get_next_day_int()如果它不能被發(fā)現(xiàn)。
getNames()返回一個(gè)array映射的枚舉成員值到他們的名字。InvariantException如果枚舉值不唯一,則拋出An 。
<?hh
namespace Hack\UserDocumentation\API\Enums\GetNames;
enum Day: int {
SUNDAY = 1;
MONDAY = 2;
TUESDAY = 3;
WEDNESDAY = 4;
THURSDAY = 5;
FRIDAY = 6;
SATURDAY = 7;
}
function check_name(string $name): bool {
return in_array($name, Day::getNames());
}
var_dump(check_name("SUNDAY")); // bool(true)
var_dump(check_name("NOPE")); // bool(false)
/*
Day::getNames() returns this:
array(7) {
[1]=>
string(6) "SUNDAY"
[2]=>
string(6) "MONDAY"
[3]=>
string(7) "TUESDAY"
[4]=>
string(9) "WEDNESDAY"
[5]=>
string(8) "THURSDAY"
[6]=>
string(6) "FRIDAY"
[7]=>
string(8) "SATURDAY"
}
*/
Output
bool(true)
bool(false)
這個(gè)例子顯示了如何使用getNames()獲取Day枚舉的名字(例如,“SUNDAY”),并檢查array提供的名稱以確定是否存在。
getValues()返回array枚舉成員名稱到它們的值的映射。
<?hh
namespace Hack\UserDocumentation\API\Enums\GetValues;
enum Day: int {
SUNDAY = 1;
MONDAY = 2;
TUESDAY = 3;
WEDNESDAY = 4;
THURSDAY = 5;
FRIDAY = 6;
SATURDAY = 7;
}
var_dump(Day::getValues());
/*
Day::getValues() returns this:
array(7) {
["SUNDAY"]=>
int(1)
["MONDAY"]=>
int(2)
["TUESDAY"]=>
int(3)
["WEDNESDAY"]=>
int(4)
["THURSDAY"]=>
int(5)
["FRIDAY"]=>
int(6)
["SATURDAY"]=>
int(7)
}
*/
Output
array(7) {
["SUNDAY"]=>
int(1)
["MONDAY"]=>
int(2)
["TUESDAY"]=>
int(3)
["WEDNESDAY"]=>
int(4)
["THURSDAY"]=>
int(5)
["FRIDAY"]=>
int(6)
["SATURDAY"]=>
int(7)
}
這個(gè)例子簡(jiǎn)單地顯示了getValues()在Dayenum 上輸出的格式。
isValid取值并返回一個(gè)bool取決于該值是否存在于枚舉中。
<?hh
namespace Hack\UserDocumentation\API\Enums\isValid;
enum Day: int {
SUNDAY = 1;
MONDAY = 2;
TUESDAY = 3;
WEDNESDAY = 4;
THURSDAY = 5;
FRIDAY = 6;
SATURDAY = 7;
}
function check_value(int $value): bool {
return Day::isValid($value);
}
var_dump(check_value(3)); // bool(true)
var_dump(check_value(9)); // bool(false)
Output
bool(true)
bool(false)
這個(gè)例子展示了如何isValid()用來確定一個(gè)給定的Day枚舉類型的基礎(chǔ)值(在本例中int)是否是一個(gè)成員值Day。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: