예를 들어 다음 코드를 살펴보십시오.
phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES);
단일 인수가 사용되고 있지만 단일 파이프 기호로 구분 된 옵션 목록을 제공합니다.
- 함수의 인수 값에 정확히 무슨 일이 일어나고 있습니까?
- 내 기능에서 동일한 것을 사용할 수 있습니까?
- 그렇다면 어떻게, 배열을 전달하는 것보다 이점이 있습니까?
예를 들어 다음 코드를 살펴보십시오.
phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES);
단일 인수가 사용되고 있지만 단일 파이프 기호로 구분 된 옵션 목록을 제공합니다.
답변:
비트 연산자는 관련된 값의 비트를 수정합니다. OR
기본적으로 비트 단위 는 왼쪽 및 오른쪽 인수의 각 비트를 함께 OR합니다. 예를 들면 :
5 | 2
다음과 같이 비트 / 바이너리로 변환됩니다.
101 | 10
결과는 다음과 같습니다.
111
때문에:
1 || 0 = 1
0 || 1 = 1
1 || 0 = 1
그리고 당신이 다음과 같은 경우에 얻는 것과 정확히 일치하는 7의 표현 인 Integer로 :
echo 5 | 2;
Ignacio가 말했듯이, 이것은 여러 플래그를 결합하는 방법으로 PHP (및 기타 언어)에서 가장 자주 사용됩니다. 각 플래그는 일반적으로 값이 일반적으로 다른 오프셋에서 1 비트 만 나타내는 정수로 설정되는 상수로 정의됩니다.
define('FLAG_A', 1); /// 0001
define('FLAG_B', 2); /// 0010
define('FLAG_C', 4); /// 0100
define('FLAG_D', 8); /// 1000
그런 다음 OR
이들을 함께 사용 하면 자체 비트 오프셋에서 각각 작동하며 충돌하지 않습니다.
FLAG_A | FLAG_C
번역 :
1 | 100
따라서 결국 켜집니다.
101
정수 5를 나타냅니다.
그런 다음 모든 코드 (설정되는 다른 플래그에 반응 할 코드)는 다음과 같습니다 (비트 사용 AND
).
$combined_flags = FLAG_A | FLAG_C;
if ( $combined_flags & FLAG_A ) {
/// do something when FLAG_A is set
}
if ( $combined_flags & FLAG_B ) {
/// this wont be reached with the current value of $combined_flags
}
if ( $combined_flags & FLAG_C ) {
/// do something when FLAG_C is set
}
하루가 끝나면 이름이 지정된 상수를 사용하여 읽기 쉽고 일반적으로 문자열이나 배열이 아닌 정수 값에 의존하여 더 최적입니다. 상수 사용의 또 다른 이점은 사용할 때 잘못 입력 된 경우 컴파일러가 경고를 알리고 던지기에 더 좋은 상황에 있다는 것입니다 ... 문자열 값이 사용되면 어떤 것이 잘못되었는지 알 수있는 방법이 없습니다.
define('MY_FLAG_WITH_EASY_TYPO', 1);
my_function_that_expects_a_flag( MY_FLAG_WITH_EASY_TPYO );
/// if you have strict errors on the above will trigger an error
my_function_that_expects_a_flag( 'my_string_with_easy_tpyo' );
/// the above is just a string, the compiler knows nowt with
/// regard to it's correctness, so instead you'd have to
/// code your own checks.
여러 플래그 의 비트 OR 인 인수를 전달하고 있습니다. 원하는 곳 어디에서나 연산자를 사용할 수 있습니다.