program story

단일 파이프 '|'를 사용하여 무엇을합니까?

inputbox 2020. 10. 19. 08:02
반응형

단일 파이프 '|'를 사용하여 무엇을합니까? 함수 인수에서 수행합니까?


예를 들어 다음 코드를 살펴보십시오.

phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES);

단일 인수가 사용되고 있지만 단일 파이프 기호로 구분 된 옵션 목록을 제공합니다.

  • 함수의 인수 값에 정확히 무슨 일이 일어나고 있습니까?
  • 내 기능에서 동일한 것을 사용할 수 있습니까?
  • 그렇다면 어떻게, 배열을 전달하는 것보다 이점이 있습니까?

비트 연산자

비트 연산자는 관련된 값의 비트를 수정합니다. OR기본적으로 비트 단위 는 왼쪽 및 오른쪽 인수의 각 비트를 함께 OR합니다. 예를 들면 :

5 | 2

다음과 같이 비트 / 바이너리로 변환됩니다.

101 | 10

결과는 다음과 같습니다.

111

때문에:

1 || 0 = 1
0 || 1 = 1
1 || 0 = 1

그리고 다음과 같은 경우에 정확히 얻는 7의 표현 인 정수로 :

echo 5 | 2;


Eddie Izzard의 말로 ... 깃발!

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 인 인수를 전달하고 있습니다. 원하는 곳 어디에서나 연산자를 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/13811922/what-does-using-a-single-pipe-in-a-function-argument-do

반응형