티스토리 뷰


오늘 PHP로 작업하다가 일반적인 언어의 유효영역(scope)로 생각하다가 한시간을 낭비한 일이 있었다.


<?php

    $apiHandler = getApiHandler();

    switch(method)

    {

    case 1:    doFunction1(); break;

    case 2:    doFunction2(); break;

    }


    function doFunction2()

    {

        $apiHandler->call("foo");

    }

?>


: 위와 같이 썼는데, 당연히 전역변수로 선언한 $apiHandler가 함수 내에서 $apiHandler 이렇게 바로 접근하면 될 줄 알았는데, object가 undefined라고 자꾸 나와서 왜그런가 했더니 로컬 함수 영역은 글로벌과는 별로도 따진다는 것이다. 만약에 함수 밖에 선언한 전역 변수를 사용하고자 한다면,


function doFunction1()

{

    global $apiHandler;

    $apiHandler->call("foo");

}


: 이렇게 global로 정의를 해주면 전역변수로서 $apiHandler를 접근하게 된다. 이외에서 $GLOBALS 를 사용하는 방법도 있다.


function doFunction1()

{

    $GLOBALS['apiHandler']->call("foo");

}


: 함수로 좀 나눈다고 시간 낭비를 하긴했으나, PHP에 대해서 조금은 더 공부를 한 것 같다. 경험하지 않으면 썩 와닿지 않는 부분을 제대로 경험했다.


끝.




공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함