이 클래스를 사용하면 프로젝트에 깃발을 쉽게 추가 할 수 있습니다.
사용할 수있는 플래그 수는 시스템 아키텍처 (예 : 32 비트 시스템의 32 개 플래그 또는 64 비트 시스템의 64 개의 플래그로 제한됩니다. 데이터베이스에 64 비트 플래그를 저장하려면 MySQL에 서명되지 않은 Bigint 또는 데이터 저장소에 해당 플래그를 저장해야합니다.
이 패키지에는 또한 자신의 클래스에서 바이너리 플래그를 직접 구현하는 데 사용할 수있는 특성이 함께 제공됩니다.
이 패키지를 설치하려면 프로젝트의 루트에서 다음 명령을 실행하십시오.
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로 전달하여 '{ "마스크": 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 );버그 또는 기능 요청의 경우 저에게 연락하거나 문제를 제출하거나 요청을 제출하십시오. 아니면 커피를 구입하여 저를 지원할 수 있습니다.