테스트 사이트 - 개발 중인 베타 버전입니다

특정 파일만 include 하는 함수 입니다. NULL이 나오는데 좀 봐주실 수 있을까요? 채택완료

레드불355 3년 전 조회 1,945

루트의 특정파일만 include 하는 함수를 만들었습니다.

</p>

<p><?php

function getDefaultMenu(){

    $menu_file = array();

    $tmp = dir(G5_PATH);

    while ($entry = $tmp->read()) {

        // default.menu로 시작하는 php 파일만 include 함

        if (preg_match("/(^default.menu(.*).*\.php)$/i", $entry))

            $menu_file[] = $entry;

    }</p>

<p>    if(!empty($menu_file) && is_array($menu_file)) {

        natsort($menu_file);</p>

<p>        foreach($menu_file as $file) {            

            include_once(G5_PATH.'/'.$file);

        }

        unset($file);

    }

    unset($menu_file);

}</p>

<p>?></p>

<p>

default.menu로 시작하는 파일을 include 하는 파일인데

include된 default.menu100.php 내용은 다름과 같구요.

</p>

<p><?php

$default_menu['default_menu100'] = array(

    array('100000', '회사소개', G5_URL . '/intro.php'),

    array('100100', '회사소개', G5_URL . '/intro.php'),

    array('100200', '회사연역', G5_URL . '/histroy.php'),

    array('100300', '오시는길', G5_URL . '/map.php')

);

?></p>

<p>

그래서 다른 별도의 페이지에서

함수를 호출하여 출력을 했습니다.

</p>

<p>getDefaultMenu();

var_dump($default_menu);

//var_dump(get_included_files());</p>

<p>

맨 아래에 get_include_files()로 확인해 include 된것은 확인했습니다.

그런데  var_dump()로 $default_menu를 출력하니 NULL아네요

 

그리고 위의 함수를 실행안 하고 그냥 코드를 실행하면

변수의 값은 잘 나옵니다.

 

함수로 변경하는데 있어서 오류사항이 있는 걸까요?

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트

함수 안에서 include하는 건 결국

함수 안에 있다는 거고

함수 안에 있는 변수는 

  함수 밖에서 사용할 수 없습니다

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

레드불355
3년 전
함수안에 있어도 include만 하는거라, include만 하면 include된 파일의 변수를 쓸 수 있을 줄 알았는데 생각해보니 안되는게 맞군요. 해당 문제는 함수 안에서 include로 선언된 배열값을 리턴하는 걸로 해결했습니다. 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

그누위즈

애초에 지금 코드가 무의미합니다.

$default_menu는 단순 메뉴를 할당하는 배열에 불과하고

결국 getDefaultMenu() 함수에서

root경로의 default.menu.XXX.php 파일을 불러오는데

해당 함수에서는

실제로 $default_menu 변수는 사용되지않습니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

e
3년 전

echo $tmp; 해서..

G5_PATH 값이 잘 불러오는지 확인하세요.

함수로 만들때 변수가 안불러오는 경우가 있습니다.

그럼 global 로 외부 변수를 선언해줘야 합니다.

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인