ด้วยคลาสนี้คุณสามารถเพิ่มธงลงในโครงการของคุณได้อย่างง่ายดาย
จำนวนการตั้งค่าสถานะที่คุณสามารถใช้นั้น จำกัด อยู่ที่สถาปัตยกรรมของระบบของคุณเช่น: 32 Flags บนระบบ 32 บิตหรือ 64 Flags ในระบบ 64 บิต ในการจัดเก็บธง 64 บิตในฐานข้อมูลคุณจะต้องจัดเก็บไว้เป็น bigint ที่ไม่ได้ลงชื่อใน MySQL หรือเทียบเท่าในที่เก็บข้อมูลของคุณ
แพ็คเกจนี้ยังมาพร้อมกับลักษณะที่คุณสามารถใช้เพื่อใช้ธงไบนารีโดยตรงในชั้นเรียนของคุณเอง
ในการติดตั้งแพ็คเกจนี้เพียงเรียกใช้คำสั่งต่อไปนี้ในรูทของโครงการของคุณ
composer require reinder83/binary-flags
สามารถใช้วิธีการต่อไปนี้ได้:
เขียนทับหน้ากากปัจจุบัน สิ่งนี้สามารถส่งผ่านเป็นอาร์กิวเมนต์แรกในตัวสร้าง
ดึงหน้ากากปัจจุบัน
ตั้งค่าฟังก์ชั่นการเรียกกลับซึ่งเรียกว่าเมื่อหน้ากากเปลี่ยนไป สิ่งนี้สามารถส่งผ่านเป็นอาร์กิวเมนต์ที่สองในตัวสร้าง
ให้ชื่อสำหรับ $mask ที่กำหนดหรือหน้ากากปัจจุบันเมื่อละเว้น เมื่อ $asArray เป็น true เมธอดจะส่งคืนอาร์เรย์ด้วยชื่อมิฉะนั้นจะส่งคืนสตริงที่คั่นด้วยเครื่องหมายจุลภาค (ค่าเริ่มต้น)
เพิ่มหนึ่งหรือหลายธงลงในหน้ากากปัจจุบัน
ลบหนึ่งหรือหลายธงออกจากหน้ากากปัจจุบัน
ตรวจสอบว่าตั้งค่าสถานะที่กำหนดไว้ในหน้ากากปัจจุบันหรือไม่ โดยค่าเริ่มต้นจะตรวจสอบบิตทั้งหมดในธงที่กำหนด เมื่อคุณต้องการจับคู่ธงใด ๆ ที่กำหนดไว้ $checkAll เป็น false
ตั้งแต่: v1.0.1
เพื่อความสะดวกฉันได้เพิ่มนามแฝงเพื่อตรวจสอบ Fith $checkAll ตั้งค่าเป็น false
ตั้งแต่: v1.2.0
ส่งคืนจำนวนธงที่ตั้งค่าไว้
ตั้งแต่: v1.2.0
ส่งคืนค่าที่สามารถเข้ารหัสโดย json_encode () ในรูปแบบของ ["mask" => 7] คุณไม่ควรเรียกใช้วิธีนี้โดยตรง แต่คุณสามารถส่งวัตถุ BinaryFlags ไปยัง JSON_ENCODE ซึ่งจะแปลงเป็น '{"Mask": 7}'
สามารถใช้วิธีการคงที่ต่อไปนี้:
ตั้งแต่: v1.1.0
ส่งคืนธงทั้งหมดด้วยชื่อของพวกเขาเป็นอาร์เรย์โดยใช้หน้ากากธงเป็นคีย์ วิธีนี้ยังสามารถโอเวอร์โหลดเพื่อส่งคืนชื่อที่กำหนดเองสำหรับธงซึ่งจะใช้โดยวิธี getFlagNames
ตั้งแต่: v1.1.0
หน้ากากกลับมาของธงทั้งหมดเข้าด้วยกัน
ตั้งแต่: v1.2.0
คุณสามารถปฏิบัติต่อวัตถุ BinaryFlags เป็นซ้ำได้ซึ่งการวนซ้ำแต่ละครั้งจะส่งคืนค่าบิตถัดไปที่ตั้งไว้รวมถึงคำอธิบาย (หรือชื่อของค่าคงที่แสดงถึงค่าบิต)
ด้านล่างรหัสการใช้งาน
// example classes which the following examples will refer to
use Reinder83 BinaryFlags BinaryFlags ;
use Reinder83 BinaryFlags Bits ;
class ExampleFlags extends BinaryFlags
{
const FOO = Bits:: BIT_1 ;
const BAR = Bits:: BIT_2 ;
const BAZ = Bits:: BIT_3 ;
} $ exampleFlags = new ExampleFlags ();
// add BAR flag
$ exampleFlags -> addFlag (ExampleFlags:: BAR );
var_export ( $ exampleFlags -> checkFlag (ExampleFlags:: FOO ));
// false
var_export ( $ exampleFlags -> checkFlag (ExampleFlags:: BAR ));
// true
// remove BAR flag
$ exampleFlags -> removeFlag (ExampleFlags:: BAR );
var_export ( $ exampleFlags -> checkFlag (ExampleFlags:: BAR ));
// false $ exampleFlags = new ExampleFlags ();
// add FOO and BAR
$ exampleFlags -> addFlag (ExampleFlags:: FOO | ExampleFlags:: BAR );
var_export ( $ exampleFlags -> checkFlag (ExampleFlags:: FOO ));
// true
var_export ( $ exampleFlags -> checkFlag (ExampleFlags:: FOO | ExampleFlags:: BAZ ));
// false because BAZ is not set
var_export ( $ exampleFlags -> checkFlag (ExampleFlags:: FOO | ExampleFlags:: BAR ));
// true because both flags are set
var_export ( $ exampleFlags -> checkFlag (ExampleFlags:: FOO | ExampleFlags:: BAZ , false ));
// true because one of the flags is set (FOO)
// alias of the above method
var_export ( $ exampleFlags -> checkAnyFlag (ExampleFlags:: FOO | ExampleFlags:: BAZ ));
// true โดยค่าเริ่มต้นชื่อธงจะขึ้นอยู่กับชื่อคงที่
$ exampleFlags = new ExampleFlags ();
$ exampleFlags -> addFlag (ExampleFlags:: FOO | ExampleFlags:: BAR | ExampleFlags:: BAZ );
var_export ( $ exampleFlags -> getFlagNames ());
// 'Foo, Bar, Baz'
// null will force current mask
var_export ( $ exampleFlags -> getFlagNames ( null , true ));
/*
array (
0 => 'Foo',
1 => 'Bar',
2 => 'Baz',
)
*/
// get flag names of given mask
var_export ( $ exampleFlags -> getFlagNames (ExampleFlags:: FOO | ExampleFlags:: BAR ));
// 'Foo, Bar' หากคุณต้องการชื่อธงที่กำหนดเองที่ไม่เท่ากับชื่อคงที่คุณสามารถแทนที่เหล่านี้ด้วย getAllFlags()
class ExampleFlagsWithNames extends BinaryFlags
{
const FOO = Bits:: BIT_1 ;
const BAR = Bits:: BIT_2 ;
const BAZ = Bits:: BIT_3 ;
public static function getAllFlags ()
{
return [
static :: FOO => ' My foo description ' ,
static :: BAR => ' My bar description ' ,
static :: BAZ => ' My baz description ' ,
];
}
}
$ exampleFlags = new ExampleFlagsWithNames ();
$ exampleFlags -> addFlag (ExampleFlags:: FOO | ExampleFlags:: BAR | ExampleFlags:: BAZ );
// null will force current mask
var_export ( $ exampleFlags -> getFlagNames ( null , true ));
/*
array (
0 => 'My foo description',
1 => 'My bar description',
2 => 'My baz description',
)
*/ use Illuminate Database Eloquent Model ;
class Test extends Model
{
private $ flagsObject ;
/**
* Retrieve flags
* @return ExampleFlags
*/
public function getFlagsAttribute ()
{
if ( $ this -> flagsObject === null ) {
$ this -> flagsObject = new ExampleFlags (
$ this -> attributes [ ' flags ' ], // set current flags mask
function ( ExampleFlags $ flags ) { // set callback function
// update the flags in this model
$ this -> setAttribute ( ' flags ' , $ flags -> getMask ());
}
);
}
return $ this -> flagsObject ;
}
}
// retrieve object from DB
$ test = Test:: find ( 1 );
// do binary operations on the flags class as described earlier
$ test -> flags -> checkFlag (ExampleFlag:: FOO );สำหรับข้อบกพร่องหรือคำขอคุณสมบัติโปรดติดต่อฉันหรือส่งปัญหาหรือดึงคำขอ หรือคุณสามารถสนับสนุนฉันด้วยการซื้อกาแฟให้ฉัน: