2012-03-10 6 views
0

이렇게 할 수 있습니까?여러 정의 또는 const를 클래스 메서드에 대한 매개 변수로 전달

class Test 
{ 
    const FLAG1 = 'flag1.'; 
    const FLAG2 = 'flag2.'; 

    public function __construct() {} 

    public function myMethod($flags) 
    { 
     echo $flags 
    } 
} 

나는이 예제를 사용하려고

$test = new Test(); 
$test->myMethod(Test::FLAG1|Test::FLAG2); 

처럼 사용하지만 내 echo2를 얻을. 메서드에 대한 매개 변수로 CONST 또는 DEFINE을 어떻게 사용할 수 있는지 궁금했습니다. 나는이 기술을 사용하여이 스크립트를 발견하고 내가 찾은 때문에

내가 물어 그것은 호기심

http://www.pgregg.com/projects/php/preg_find/preg_find.php.txt

+0

비트 연산자'|'를 제거하고 하나의 플래그를 전달하면 작동합니다. – JohnP

+0

그래,하지만 내 물건은 내가 그 사람이 그의 마술을 어떻게했는지보고 싶다는 것이었다. http://www.pgregg.com/projects/php/preg_find/preg_find.php.txt – Eli

+0

예,하지만 그는 매개 변수를 전달하지 않고있다. bitwise operations - http://php.net/manual/en/language.operators.bitwise.php – JohnP

답변

2

예,이 가능하지만 당신이 지금 가지고있는 플래그 값입니다.

비트 단위 연산자가 작동합니다 ... 음, 비트. 1001 OR 0110을 입력하면 1111이됩니다. 따라서 이와 같은 상수를 사용할 수 있으려면 해당 값은 2의 제곱이어야합니다.

const FLAG1 = '1'; 
const FLAG2 = '2'; 
const FLAG3 = '4'; 

그런 다음 마스크에 함수의 매개 변수 값을 -ing AND하여 방법을 테스트 할 수 있습니다. 예를 들어 누군가 FLAG1|FLAG2을 전달한 경우 FLAG2과 같은 플래그 2 (0011 AND 0010 = 0010)를 테스트 할 수 있습니다. http://php.net/manual/en/language.operators.bitwise.php

것은 내가이 일반적으로 가난한 간주 될 수 있음을 지적한다 : PHP, 이것은 당신이 여기에 비트 연산자를 모두 볼 수 있습니다

전달되었는지 여부를 FLAG2의 부울을 얻을 ($flags & FLAG2) == FLAG2 일 것입니다 PHP 프로그래밍을위한 양식. 여러 매개 변수를 전달하는 훨씬 더 좋은 방법이있을 때 왜 이렇게합니까? 개인적으로, 나는 배열을 받아 들일 뿐이다.

의미가 있습니까? 그렇지 않은 경우 자세한 질문을하면 후속 조치를 취할 것입니다.

+0

나는 보통 매개 변수로 받아 들여 배열을 사용하지만, 독특하고 무신론적인 다른 것을 만들려고한다는 것을 이해한다. 하지만'($ flags & FLAG2) == FLAG2'를 확인해야하는 이유에 대해 좀 더 자세히 설명 할 수 있다면 정말 좋을 것입니다. 'FLAG2'만 확인할 수는 없습니까? – Eli

+0

@Eli, 아니요, 왜냐하면'FLAG2'입니다. 'AND''와'$ flags'를 함께 사용하면'0'과 동등한 값을 얻을 수 있습니다. 그렇지 않으면'FLAG2'와 같은 값을 얻게됩니다. 다시, '1 AND 1 = 1', 그리고'0 AND 1 = 0'. 기본적으로'AND' 연산을 필터로 사용하여 함수에'$ flags'로 전달 된 다른 모든 플래그를 걸러냅니다. – Brad

관련 문제