2013-04-10 6 views
1

다음은 시나리오입니다.명명 규칙에 따라 클래스의 메서드를 구별 할 수 있습니까?

나는 미리 정해진 양의 방법이없는 클래스가 있습니다. 일부는 function actionName이고 나머지는 function filterName이라고하며, "filter""action"은 어떤 유형의 메소드인지 정의하고 "Name"은 아무거나 될 수 있습니다.

$methods = get_class_methods($this); 

foreach ($methods as $method) { 

    if ($method == 'action') 
    $this->DoSomething($this->{$method}()); 

    if ($method == 'filter') 
    $this->DoSomethingElse($this->{$method}()); 

} 

가 어떻게 표현을 문자열의 모든 유형을 사용하거나 등록하지 않고 달성 할 수 있습니다 내 __construct()에서

내가하고 싶어?

나는 get_class_methods()의 대안을 사용하고 있습니다. 그러나 얼마나 많은 "action" 또는 "filter" 방법이 존재하는지 결코 알지 못할 것입니다.

답변

1
if (substr($method,0,6) == "action") { } 

if (substr($method,0,6) == "filter") { } 

키워드의 함수 이름에서 처음 여섯 개의 문자 체인을 확인하기 만하면됩니다. 경고하십시오 - 키워드가 너무 많으면 실적이 저하 될 수 있습니다.

+0

나는이 잘못을 읽을 수도 있지만 주된 이유는 당신이 [Benchmarks] (http://net-beta.net/ubench/index.php?t)를 보면 어떤 유형의 str 검색도 사용하고 싶지 않기 때문이다. = strpos5) 80 루프가 약 1 초 걸린다는 인상을줍니다. 그게 내 머리 속의 지옥 같아. 내 예제에서 나는 100 가지가 넘는 방법을 가질 수 있었다. 내가 예측하거나 알 수없는 어떤 것입니다. –

+0

"다른 방법"의 관점에서 볼 때 실제로 어떤 종류의 문자열 비교도 사용하지 않고 문자열을 식별 할 수있는 방법을 거의 보지 못했습니다. 당신이 사용할 수있는 편리한 플래그가 없기 때문에, 남은 유일한 것은 검색 테이블입니다 :-( –

+0

기본적으로'function {type} name() {}'을 실행하고 싶다면'if (functionType ($ fName) = = 'action') {...}' –

관련 문제