>백엔드 개발 >PHP 튜토리얼 >PHP의 변수 범위에 대해 간략하게 소개해주세요. . .

PHP의 변수 범위에 대해 간략하게 소개해주세요. . .

WBOY
WBOY원래의
2016-08-20 09:04:01942검색

최근에 PHP를 좀 작성해야 하는데, 이전에 작성한 적이 없고 js만 알고 있습니다. PHP의 변수는 JS와 같은 범위 체인에서 참조되지 않는 것 같습니다. 아래 코드가 이와 같다면 어떻게 구현하나요?

<code>function A(){
    $num = 0;
    function B(){
        //这里如何引用到变量$num???
    }
}</code>

B의 전역 $num이 전역 변수 $num을 참조할 수 있다는 것을 확인했는데 $num이 전역이 아닌 것 같습니다. . . 조언 좀 부탁드립니다.

답글 내용:

최근에 PHP를 좀 작성해야 하는데, 이전에 작성한 적이 없고 js만 알고 있습니다. PHP의 변수는 JS와 같은 범위 체인에서 참조되지 않는 것 같습니다. 아래 코드가 이와 같다면 어떻게 구현하나요?

<code>function A(){
    $num = 0;
    function B(){
        //这里如何引用到变量$num???
    }
}</code>

B의 전역 $num이 전역 변수 $num을 참조할 수 있다는 것을 확인했는데 $num이 전역이 아닌 것 같습니다. . . 조언 좀 부탁드립니다.

전송:
JavaScript는 익명 함수에서 외부 변수를 직접 사용할 수 있습니다.
기본적으로 PHP 익명 함수는 자신이 위치한 코드 블록의 컨텍스트 변수를 직접 호출할 수 없습니다. 클로저(익명 함수)와 외부 변수를 연결하려면 use 키워드를 사용해야 합니다.

<code>function getMoney() {
    $rmb = 1;
    $dollar = 6;
    $func = function() use ( $rmb ) {
        echo $rmb;
        echo $dollar;
    };
    $func();
} 
getMoney();
//输出:
//1
//报错,找不到dorllar变量
</code>

보시다시피, use 키워드에 dollar가 선언되어 있지 않고, 이 익명 함수에서는 얻을 수 없으므로 개발 시 이 문제에 주의하시기 바랍니다.

익명 함수에서 컨텍스트 변수를 변경하는 것이 가능한지 궁금해하시는 분들도 계시겠지만, 저는 불가능하다는 것을 확인했습니다.

<code>function getMoney() {
    $rmb = 1;
    $func = function() use ( $rmb ) {
        echo $rmb;
        //把$rmb的值加1
        $rmb++;
    };
    $func();
    echo $rmb;
}
getMoney();
//输出:
//1
//1
</code>

use가 참조하는 것은 단지 변수의 복사본이라는 것이 밝혀졌습니다.

변수를 복사하는 대신 전체를 참조하려면 변수 앞에 & 기호를 추가해야 합니다.

<code>function getMoney() {
    $rmb = 1;
    $func = function() use ( &$rmb ) {
        echo $rmb;
        //把$rmb的值加1
        $rmb++;
    };
    $func();
    echo $rmb;
}
getMoney();
//输出:
//1
//2
</code>

익명 함수가 외부 세계로 반환되면 익명 함수는 사용 시 참조되는 변수를 저장하지만 외부 세계에서는 이러한 변수를 얻을 수 없게 됩니다. 더 명확하게:

<code>function getMoneyFunc() {
    $rmb = 1;
    $func = function() use ( &$rmb ) {
        echo $rmb;
        //把$rmb的值加1
        $rmb++;
    };
    return $func;
}
$getMoney = getMoneyFunc();
$getMoney();
$getMoney();
$getMoney();
//输出:
//1
//2
//3
</code>

<code class="php">function A()
{
    $num = 0;
    call_user_func(function () use ($num) {
        //这么用$num
    });
}</code>

위 답변은 단지 귀하의 질문에 대한 답변입니다. 먼저 매뉴얼을 읽고 PHP의 기본 구문을 숙지하는 것이 좋습니다. 그렇지 않으면 질문이 있으면 Q&A 웹 사이트에 한 번 물어보십시오. 너무 비효율적입니다. js를 사용하지 마세요

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.