使用此课程,您可以轻松地将标志添加到您的项目中。
您可以使用的标志数量仅限于系统的体系结构,例如:32位系统上的32个标志或64位系统上的64个标志。要将64位标志存储在数据库中,您需要将其存储在MySQL中或数据存储中的同等标志中。
该软件包还带有一个特征,您可以用它直接在自己的课程中实现二进制标志。
要安装此软件包,只需在项目的根部运行以下命令即可。
composer require reinder83/binary-flags
可以使用以下方法:
覆盖当前的面具。这可以作为构造函数中的第一个参数传递。
检索当前的口罩。
设置掩码更改时称为的回调函数。这可以作为构造函数中的第二个参数传递。
省略时给定$mask或当前蒙版的名称。当$asArray为true时,该方法将返回带有名称的数组,否则将返回逗号分隔字符串(默认)。
在当前掩码中添加一个或多个标志。
从当前掩码中删除一个或多个标志。
检查是否给定标志在当前蒙版中设置。默认情况下,它将检查给定标志中的所有位。当您想将任何给定标志设置$checkAll与false匹配时。
自从:v1.0.1
对于您来说,我为使用$checkAll false的checkflag添加了一个别名。
自:v1.2.0
返回已设置的标志数。
自:v1.2.0
返回一个可以由["mask" => 7]的形式的JSON_ENCODE()编码的值。您不必直接调用此方法,而是可以将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 );对于错误或功能请求,请随时与我联系,提交问题或拉请请求。或者,您可以通过给我买咖啡来支持我: