คำเตือน หากคุณใช้ PHP 8.1 หรือสูงกว่าเราขอแนะนำให้คุณใช้ enums PHP ดั้งเดิมแทนแพ็คเกจนี้
เราอาจปล่อยแพตช์การบำรุงรักษาบางอย่าง แต่การสนับสนุนสำหรับแพ็คเกจนี้กำลังถูกยกเลิก
อย่าลังเลที่จะแยกรหัสของเราและปรับให้เข้ากับความต้องการของคุณ
ไลบรารีนี้ให้การใช้งาน enum / การแจงนับสำหรับ 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 ตอนนี้คุณสามารถพิมพ์ Hint Object 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 (); ส่งคืนค่า (if-any) ที่แมป (ในอาร์เรย์ที่ส่งคืนโดย map() ) หากไม่มีการแมปค่าวิธีนี้จะส่งคืน null
$ enum -> value ();ส่งคืนจริงถ้าอินสแตนซ์นี้เหมือนกับคีย์คงที่หรืออินสแตนซ์การแจงนับ
$ enum -> is (City:: SYDNEY ); // Compare to constant key
$ enum -> is (City:: SYDNEY ()); // Compare to instance เมธอด __toString() ถูกกำหนดให้ส่งคืนชื่อคงที่
( string )City:: SYDNEY (); // "SYDNEY" ส่งคืนอาร์เรย์ซึ่งแมปคีย์คงที่กับค่า วิธีนี้สามารถนำไปใช้ในระดับย่อย การใช้งานเริ่มต้นจะส่งคืนอาร์เรย์ของคีย์ที่แมปไปยัง null
ส่งคืนอาร์เรย์ของอินสแตนซ์ enum
ส่งคืนอาร์เรย์ของคีย์คงที่
ส่งคืนอาร์เรย์ของค่าที่กำหนดไว้ใน map() หากไม่ได้ใช้ map() จะส่งคืนค่าอาร์เรย์ของค่า NULL
ส่งคืนอาร์เรย์ของชื่อคงที่ทั้งหมดที่ประกาศด้วยชั้นเรียน
ส่งคืนคีย์แบบเชื่อมโยงของ constant_name => สำหรับคีย์สำหรับชื่อคงที่ทั้งหมดที่ประกาศภายในคลาส
ส่งคืนคีย์สำหรับชื่อคงที่ที่กำหนด
ส่งคืนชื่อคงที่สำหรับคีย์ที่กำหนด (ผกผันของ keyForName )
ส่งคืนค่า (หรือ null ถ้าไม่ได้แมป) สำหรับคีย์ที่กำหนด (ตามที่ประกาศไว้ในวิธีการ map() )
ส่งคืนคีย์สำหรับค่าที่กำหนด (ตามที่ประกาศไว้ใน map() )
หมายเหตุ: หากมีค่าที่ซ้ำกันอยู่ภายในเมธอด
map()แล้วคีย์แรกเท่านั้นที่จะถูกส่งคืน
สร้างอินสแตนซ์ของ enum นี้จากชื่อคงที่ที่กำหนด
สร้างอินสแตนซ์ของ enum นี้จากคีย์ที่กำหนด
ส่งคืนจริงถ้าคีย์ที่กำหนดมีอยู่
ส่งคืนจริงหากมีการประกาศชื่อคงที่ (กรณีที่ไวต่อตัวพิมพ์ใหญ่) ในชั้นเรียน
พ่น A RexlabsEnumExceptionsInvalidKeyException หากไม่มีคีย์ที่กำหนด
เพื่อเรียกใช้การทดสอบ:
composer testsเพื่อเรียกใช้รายงานความคุ้มครอง:
composer coverage รายงานความครอบคลุมคือเอาต์พุตไปที่ ./tests/report/index.html
ยินดีต้อนรับการมีส่วนร่วมโปรดส่งคำตอบแบบดึงหรือสร้างปัญหา รหัสที่ส่งของคุณควรจัดรูปแบบโดยใช้มาตรฐาน PSR-1/PSR-2