함수 인수에 단일 파이프를 사용하는 방법

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

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인 인수를 전달하고 있습니다.원하는 곳이라면 어디서든 교환원을 이용하실 수 있습니다.