최근에 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를 사용하지 마세요