مع هذا الفصل ، يمكنك بسهولة إضافة أعلام إلى مشاريعك.
يقتصر عدد الأعلام التي يمكنك استخدامها على بنية نظامك ، على سبيل المثال: 32 علامة على نظام 32 بت أو 64 علامة على نظام 64 بت. لتخزين الأعلام 64 بت في قاعدة بيانات ، ستحتاج إلى تخزينها على أنها Bigint غير موقعة في MySQL أو ما يعادلها في مخزن البيانات الخاص بك.
تأتي هذه الحزمة أيضًا مع سمة يمكنك استخدامها لتنفيذ الأعلام الثنائية مباشرة في صفك.
لتثبيت هذه الحزمة ، قم ببساطة بتشغيل الأمر التالي في جذر مشروعك.
composer require reinder83/binary-flags
يمكن استخدام الطرق التالية:
الكتابة فوق القناع الحالي. يمكن تمرير هذا كوسيطة أولى في المنشئ.
استرداد القناع الحالي.
اضبط وظيفة رد الاتصال التي تسمى عندما يتغير القناع. يمكن تمرير هذا كوسيطة ثانية في المنشئ.
أعط الاسم (s) $mask المعطى أو القناع الحالي عند حذفه. عندما تكون $asArray true ستعود الطريقة إلى مجموعة مع الأسماء ، وإلا سيتم إرجاع سلسلة مفصولة فاصلة (افتراضي).
يضيف علامات واحدة أو متعددة إلى القناع الحالي.
يزيل علامات واحدة أو متعددة من القناع الحالي.
تحقق مما إذا تم تعيين العلم (العلم) في القناع الحالي. بشكل افتراضي ، سيتحقق من جميع البتات في العلم المحدد. عندما تريد مطابقة أي من الأعلام المحددة ، تم تعيين $checkAll إلى false .
منذ: v1.0.1
بالنسبة لك مريح ، لقد أضفت اسمًا مستعارًا إلى CheckFlag مع تعيين $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
يمكنك التعامل مع كائن ثنائي flags باعتباره أمرًا غير مرغوب فيه ، حيث سيعيد كل تكرار القيمة التالية التي تم تعيينها بما في ذلك وصفه (أو اسم الثابت الذي يمثل قيمة البت).
أدناه رمز الاستخدام على سبيل المثال
// 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 );بالنسبة للأخطاء أو طلبات الميزات ، لا تتردد في الاتصال بي أو إرسال مشكلة أو طلب سحب. أو يمكنك أن تدعمني عن طريق شراء قهوة لي: