Dengan kelas ini Anda dapat dengan mudah menambahkan bendera ke proyek Anda.
Jumlah bendera yang dapat Anda gunakan terbatas pada arsitektur sistem Anda, misalnya: 32 bendera pada sistem 32-bit atau 64 bendera pada sistem 64-bit. Untuk menyimpan bendera 64-bit dalam database, Anda harus menyimpannya sebagai Bigint yang tidak ditandatangani di MySQL atau setara di datastore Anda.
Paket ini juga dilengkapi dengan sifat yang dapat Anda gunakan untuk mengimplementasikan bendera biner secara langsung di kelas Anda sendiri.
Untuk menginstal paket ini cukup jalankan perintah berikut di root proyek Anda.
composer require reinder83/binary-flags
Metode berikut dapat digunakan:
Timpa topeng saat ini. Ini dapat disahkan sebagai argumen pertama dalam konstruktor.
Ambil topeng saat ini.
Atur fungsi panggilan balik yang dipanggil saat topeng berubah. Ini dapat disahkan sebagai argumen kedua dalam konstruktor.
Berikan nama untuk $mask yang diberikan atau masker saat ini saat dihilangkan. Ketika $asArray true , metode ini akan mengembalikan array dengan nama -nama tersebut, jika tidak, string yang dipisahkan koma akan dikembalikan (default).
Menambahkan satu atau beberapa bendera ke topeng saat ini.
Menghapus satu atau beberapa bendera dari topeng saat ini.
Periksa apakah bendera yang diberikan diatur dalam topeng saat ini. Secara default, itu akan memeriksa semua bit di bendera yang diberikan. Ketika Anda ingin mencocokkan salah satu bendera yang diberikan, set $checkAll ke false .
Sejak: v1.0.1
Untuk Anda yang nyaman, saya telah menambahkan alias untuk checkflag dengan $checkAll diatur ke false .
Sejak: v1.2.0
Mengembalikan jumlah bendera yang telah ditetapkan.
Sejak: v1.2.0
Mengembalikan nilai yang dapat dikodekan oleh json_encode () dalam bentuk ["mask" => 7] . Anda tidak perlu memanggil metode ini secara langsung, sebaliknya Anda dapat meneruskan objek BinaryFlags ke JSON_ENCODE yang akan mengonversinya menjadi '{"mask": 7}'.
Metode statis berikut dapat digunakan:
Sejak: v1.1.0
Kembalikan semua bendera dengan nama mereka sebagai array, menggunakan topeng bendera mereka sebagai kunci. Metode ini juga dapat kelebihan beban untuk mengembalikan nama khusus untuk bendera, yang akan digunakan dengan metode getFlagNames .
Sejak: v1.1.0
Mengembalikan topeng semua bendera bersama -sama
Sejak: v1.2.0
Anda dapat memperlakukan objek BinaryFlags sebagai iterable, di mana setiap iterasi akan mengembalikan nilai bit berikutnya yang telah ditetapkan termasuk deskripsinya (atau nama konstan yang mewakili nilai bit).
Di bawah beberapa contoh kode penggunaan
// 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 Secara default, nama bendera didasarkan pada nama konstan
$ 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' Jika Anda ingin nama bendera khusus yang tidak sama dengan nama konstan, Anda dapat mengganti ini dengan 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 );Untuk bug atau permintaan fitur, jangan ragu untuk menghubungi saya atau mengirimkan masalah atau permintaan tarik. Atau Anda dapat mendukung saya dengan membelikan saya kopi: