2011-10-08 4 views
4

피해야 할 나쁜 관행으로 간주"부작용"이있는 include()/require()가 나쁜 습관입니까?

_________________________ 
//index.php 
... 
require("header.php"); 
... 
_________________________ 

_________________________ 
//header.php 
printHeader() 

function printHeader(){ 
    echo 'something'; 
    ... 
} 
_________________________ 

같은 일을하고 있습니까?

저는 개인적으로 require() (또는 require_once() 또는 include())이 실행되면 다른 함수/개체에 "링크"를 추가하고 다른 것을 실행하지 않아야한다고 개인적으로 생각합니다. 다른 말로하면 필자의 요구는 다른 언어의 가져 오기/사용과 매우 유사한 방식으로 행동해야합니다.

위의 예제는 매우 사소한 것이지만 분명히 모든 종류의 "부작용"에 대해 작성하고 있습니다. 정의 함수 나 세션이있는 트릭은 포함 된 일부 파일에서 자주 발견되는 다른 남용입니다.

+0

아마 Programmers.SE에 속합니다 .SE –

+0

그건 개인 디자인이 아닌 일반 디자인의 문제입니다. 당신이 개인적인 취향으로 디자인 할 수 있다면, 그것은 당신의 * 개인 취향입니다. 원하는 언어로 도구를 사용하십시오. – hakre

+0

많은 템플릿 엔진이이 부작용에 의존합니다. 나쁜 습관이라는 뜻은 아닙니다. 당신이 그것을 좋아하지 않는다면 - 그것을 사용하지 마십시오. 자신의 상황에 유용하다고 생각되면 사용하십시오. –

답변

5

예 (매우) 악의적 인 사례입니다 매우 명시 적으로 문서화 된 경우가 아니면입니다.

include 또는 require (및 다른 언어로 그 등가물)는 일반적으로 만 현재 범위에 새로운 기능을 소개하고 자신의 호출을 유발해서는 안됩니다.

2

개인 디자인이 아닌 일반 디자인의 문제입니다. 개인적인 취향으로 디자인 할 수 있다면 개인 취향입니다. 원하는대로하시오, 언어를 도구으로 사용하십시오.

예를 들어 PHP를 서버 측 포함에 대한 대체품으로 사용하는 경우 대부분 PHP 일부가 포함 된 HTML을 포함하는 것이 일반적입니다. 훌륭한 사이트는 이걸로 지어졌습니다. 현실 세계에서 그런 종류의 디자인에는 아무런 문제가 없습니다.

그러나 세밀하게 제어해야하는 경우 파일 대신 개체를 주로 사용합니다. 이 경우 귀하의 코드에 포함시키지 말아야 할 것이지만, 요청시 응용 프로그램의 클래스 이름에 따라 필요로하는 오토로더를 제안하십시오.

그러나 예를 들어 귀하의 질문에 어쨌든 많은 개념이없는 것처럼 보입니다. 어쩌면 include 내부에 지역 변수가 있어야합니다. 그러나 include helper 함수를 동적으로 포함 시키면 더 쉽게 구현할 수 있습니다. 같은

/** 
* include a file with it's own local scope. 
* 
* @param string path to include file 
* @param array (optional) variables, keyed with variable name. 
* @return mixed return value of include 
*/ 
function include_helper() 
{ 
    if (!func_num_args()) 
    { 
     return NULL; 
    } 
    elseif (2 === func_num_args() && is_array(func_get_arg(1))) 
    { 
     extract(func_get_arg(1)); 
    } 
    return include(func_get_arg(0)); 
} 

그러므로 각각이 포함 같은 이름을 갖는 등의 내부 기능을 정의하기 위해 여분.

관련 문제