2011-03-10 8 views
1

, 나는 이런 식으로 뭔가 일을 고려 중이 야 '라는': 그것은 작동나쁜 습관? 무엇 그것은 PHP에서

function foo(){ 
echo 'bar'; 
} 

$fn = 'foo'; 

$fn(); 

을하지만 나쁜 관행으로 간주됩니다?

각 요소에는 해당 기능이있는 다차원 배열이 있습니다. 해당 함수 이름을 저장하고 배열을 통과 할 때 각 요소에 해당하는 함수를 호출하고 싶습니다. 같은

뭔가 :이 방법

function render_el1(){ echo 'et';} 
function render_el2(){ echo 'to';} 

$elements = array(
    'el_1' => array(
     'name' => 'Element One' 
    , 'func' => 'render_el1' 
    ) 
, 'el_2' => array(
     'name' => 'Element Two' 
    , 'func' => 'render_el2' 
    ) 
); 


foreach($elements as $element => $options){ 
    $fn = $options['func']; 

    echo '<h1>'.$options['name'].'</h1>'; 

    if (function_exists($fn)) { 
     $fn(); 
    } 
} 

모든 의견은 매우 환영합니다, 나는이 방법은 프로그래밍 용어라는 것을 알고 싶습니다. 이 나쁜 관행이지만, 그것이 이해하기 어려운 코드를 만들어

+0

나는 그것을 reflectionesque evil이라고 부르겠다. 그러나 나는 그 재료가 확실하지 않다. :) –

답변

8

확실하지 : 당신의 짧은 (5 선) 예를 이해하기 위해, 내가 사용

:-(생각 했어 call_user_func()과 같은 종류의 다른 함수는 적어도 하나의 장점을 가질 수 있습니다. 코드를 살펴보면, 일반적으로 익숙하지 않은 방식으로 함수를 호출한다는 것을 즉시 이해할 수 있습니다.

+0

그것은 진짜 의도를 아주 잘 모호하게 만든다! –

+0

고마워요. call_user_func()는 물론 더 좋은 방법입니다. – mikkelbreum

+0

당신은 환영합니다 :-) 재미있게 보내세요! –

1

두 번째 예제에서는 함수를 배열에 등록한 다음 렌더링 프로세스와 비슷한 모양으로 호출하십시오. 이것은 C에서 함수 포인터 (또는 페인트 이벤트 콜백 등)를 사용하는 것과 유사합니다. 다형성을 사용하고 싶지 않거나 사용하지 않으려는 경우 괜찮음 접근 방식입니다 ( OOP을 유용하게 만드는 기능).

당신의 접근 방식은 그 단계에서 더 간단하지만 더 정교한 코드를 추가하는 경우 더 많은 비중을 차지할 것입니다.

+0

덕분에, 당신 말이 맞아요, 그것의 렌더링 과정. 나는 아직 익숙하지 않아서 다형성을 사용할 수 없지만, 그것이 무엇인지 살펴볼 것입니다. 이것은 현재의 (WordPress Theme) 프로젝트에 비해 너무 간단 할 수 있습니다. – mikkelbreum

+0

그래서 다른 사람들이이 문제에 직면하게됩니다. 초보자를위한 훌륭한 튜토리얼은 다음과 같습니다. http://net.tutsplus.com/tutorials/php/understanding-and-applying-polymorphism-in-php/ – mikkelbreum