2012-03-23 2 views
2

모두 좋은 하루.PHP의 함수에 대한 이진 플래그

내가 인수의 수를 증가시키지 않고, 함수에 대해 여러 플래그를 사용하는 방법을 알아 내려고 노력하고있어. 예를 들어 그 some_func처럼 사용하기 위해

(| flag2 | 인 flag1 flag3);

는 지금 그

define('flag1', 1); 
define('flag2', 2); 
define('flag3', 4); 

function flagtest($flags) 
{ 
if ($flags & flag1) 
    echo 'flag1 is on, '; 
if ($flags & flag2) 
    echo 'flag2 is on, '; 
if ($flags & flag3) 
    echo 'flag3 is on, '; 
} 
flagtest(flag2 | flag3); 

처럼했다 그리고 그것은 플래그 2와 3에 있음을 prings.

그래서 모든 것이 작동합니다. 하지만 ... 더 나은 방법이있을 것이라고 확신합니다. 맞습니까? 질문은 - 어떻게하면 좋을까요? 나는 그런 것들을 구현할 적절한 방법이 있다고 확신한다.

+0

가능한 중복 (http://stackoverflow.com/questions/9644085/pass-multiple-defines-or-const-as-a-parameter-to [클래스 메소드의 파라미터로서 또는 다수의 정의 CONST 통과] -a-class-method) – Brad

+0

@Brad, 아니야 :) – NewProger

+0

Check http://www.shawnolson.net/a/601/setting_bits_and_flags_in_php.html –

답변

2

는 분명히 그것이 수행해야하는 방법입니다. 원하는 결과가 설명 된대로 다른 방법으로 수행 할 필요가 없습니다.

1

당신은과 같이, 당신의 $flags 인수에 배열을 사용할 수 있습니다 :

function flagtest($flags = false) 
{ 
    if (is_array($flags) 
    { 
     foreach ($flags as $index => $value) 
     { 
      if ($value == true) echo "flag $index is on\n"; 
     } 
    } 
} 

$my_flags = array(true, true, false); 
flagtest($my_flags); // -> flag1 is on, flag2 is on, 
+0

배열을 사용하여이 작업을 수행 할 수 있음을 알고 있지만, 몇 가지 이유로 그들을 사용하고 싶지 않습니다. – NewProger