2010-03-20 1 views
9

내 PHP는 약간 녹슬었지만 지금은 내 마음을 괴롭 히고 있습니다. 나는 이것을 봤 거든 내가 찾은 모든 stackoverflow 질문을 읽을 수 관련,하지만 그 모든 그들에 합법적 인 정의되지 않은 변수가있는 것 같았다. 그게 내 것이 나를 똑같은 문제라고 믿게하지만, 단순한 코드를 쳐다 보지 않고서는 이것을 줄여서 어디서나 나를 데려 간다. 제발 누군가가 내 dunce 모자를주고 내가 뭘 잘못했는지 말해줘!PHP는 내 정의 된 변수가 정의되지 않았 음을 주장합니다.

<?php 
//test for damn undefined variable error 

$msgs = ""; 

function add_msg($msg){ 
    $msgs .= "<div>$msg</div>"; 
} 
function print_msgs(){ 
    print $msgs; 
} 

add_msg("test"); 
add_msg("test2"); 
print_msgs(); 
?> 

이 나에게 미치게 출력은 다음을 제공합니다 :

공지 사항 : 정의되지 않은 변수 : MSG를 C에서을 : \ WAMP \ www가 \ fgwl 라인에서 PHP-LIB \의 fgwlshared.php \ 7

공지 사항 : 정의되지 않은 변수 : C에서 MSG를 : \ WAMP \ www가 \ fgwl 라인에서 PHP-lib 디렉토리의 \의 fgwlshared.php \ 7

공지 사항 : 정의되지 않은 변수 : C에서 MSG를 : \ WAMP \ www가 \ fgwl \ PHP- lib \ fgwlshared.php on line 10

예,이 파일은 공유 파일로되어 있지만 현재 내가 붙여 넣은 파일을 제거했습니다. 어떤 아이디어?

답변

10

전역 범위에서 정의됩니다. 사용하려면 global을 사용하십시오.

+1

예. 그게 그랬어. php에서 범위를 닦아야 할 것 같습니다. 감사! – tedders

13
<?php 
$msgs = ""; 

function add_msg($msg){ 
    global $msgs; 
    $msgs .= "<div>$msg</div>"; 
} 
function print_msgs(){ 
    global $msgs; 
    print $msgs; 
} 

add_msg("test"); 
add_msg("test2"); 
print_msgs(); 
?> 

global는 PHP 로컬 기능 scope에서 전역 변수를 사용할 필요가 있음을 알려줍니다. 당신이 전역을 사용하지 않으려면

+1

질문에 답하기 때문에 나는 이것을 upvoted했습니다.하지만 전역 변수를 사용하는 것은 매우 나쁜 습관이라고 덧붙여 야합니다. 세계적으로 생각하고 지역적으로 행동하십시오. 그들은 정당한 이유없이 셔츠에 인쇄하지 않습니다. – Kris

+0

예를 들어 주셔서 감사합니다. – tedders

+1

당신을 진심으로 환영합니다. 그러나 Kris가 당신의 마음에 준 조언을 계속하십시오. 이 예제에서 무슨 일이 일어나고 있는지는 분명하지만 큰 (ger) 애플리케이션의 경우 어떤 변수로 인해 누가 오류가 발생하는지 누가 더럽고 명확하지 않을 수 있습니다. – Veger

1

, 당신이 사용을

function add_msg($msg) 
    { 
     echo "<div>$msg</div>"; 
    } 
    add_msg("test"); 
    add_msg("test2"); 

기능을 JAST 수, 결과는 동일합니다.

5

이와 같이 전역을 사용하는 것은 좋지 않습니다. 다음과 같은 대체 방법을 고려하십시오.

class MessageQueue { 
    private static $msgs; 


    public static function add_msg($msg){ 
    self::$msgs .= "<div>$msg</div>"; 
    } 
    public static function print_msgs(){ 
    print self::$msgs; 
    } 
} 


MessageQueue::add_msg("test"); 
MessageQueue::add_msg("test2"); 
MessageQueue::print_msgs();