programing

함수 인수로 단일 파이프 '|'를 사용하는 기능

copysource 2022. 10. 11. 22:38
반응형

함수 인수로 단일 파이프 '|'를 사용하는 기능

다음 코드를 예로 들어 보겠습니다.

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;

에디 아이자드의 말을 빌자면...깃발!

Ignacio가 말했듯이, 이것은 여러 플래그를 결합하는 방법으로 PHP(및 다른 언어)에서 가장 많이 사용됩니다.각 플래그는 보통 다른 오프셋에서 하나의 비트만 나타내는 정수로 값이 설정된 상수로 정의됩니다.

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

반응형