신비한 변수
PHP 변수 범위에 대한 초보자 자습서에 오신 것을 환영합니다. 함수에서 변수를 정의하려고 시도한 후 나중에 신비하게 "사라지는"것을 본 적이 있습니까? PHP의 버그가 아니며 악의적 인 외계인에 의해 납치되지 않았으므로 안심하십시오. 이것은 "가변 범위 (variable scope)"라는 메커니즘이며, PHP가 메모리 소비를 관리하고 혼동을 줄이는 방법 중 하나입니다.
그러나 이 모든 특수 효과가 어떻게 작동합니까? 무엇을 찾아야 합니까? 알아 보려면 계속 읽으십시오!
ⓘ이 튜토리얼을 시작할 때 모든 예제 소스 코드가 포함 된 zip 파일을 포함 시켰으므로 모든 내용을 복사하여 붙여 넣을 필요가 없습니다.
예제 코드 다운로드
먼저 약속 한대로 소스 코드에 대한 다운로드 링크가 있습니다.
소스 코드 다운로드
모든 예제 소스 코드를 다운로드하려면 여기를 클릭하십시오. MIT 라이센스에 따라 릴리스 했으므로 코드 위에 빌드하거나 자신의 프로젝트에서 자유롭게 사용할 수 있습니다.
빠른 시작
기본
변수 범위의 작동 방식에 대한 실제 코드 예제로 이동하기 전에 기본 사항에 대한 섹션이 있습니다. 변수 범위 란 무엇이고 어떤 역할을 하며 무엇이 좋은지에 대한 것입니다.
가변 범위 란 무엇입니까?
오래된 위키 백과에서 간단히 인용하겠습니다.
컴퓨터 프로그래밍에서 이름 바인딩의 범위 (예 : 변수와 같은 엔티티와 이름의 연관)는 바인딩이 유효한 컴퓨터 프로그램의 영역입니다. 여기서 이름은 엔티티를 참조하는 데 사용될 수 있습니다. 이러한 영역을 스코프 블록이라고 합니다.
그렇습니다. PHP에서 변수 범위가 무엇인지에 대한 좋은 아이디어입니다. 평신도 용어에서, 변수는 스코프 블록으로 알려진 특정 유효 영역 내에 만 존재하며, 변수는 한 번 사라집니다. 예를 들어 함수 안에 변수를 정의 할 때 :
변수 범위가 무엇입니까?
그렇다면 왜 가변 범위와 같은 것이 있습니까? 변수가 사라지지 않고 모든 곳에 존재한다면 더 좋지 않을까요? 음 ... 아니.
PHP에서 범위를 어떻게 정의합니까?
변수의 범위를 정의 할 수 있는 두 가지 방법이 있습니다. 구체적으로 변수를 정의하거나 스크립트에서 변수를 자연스럽게 배치함으로써 가능합니다. PHP에는 일반적으로 4 개의 변수 범위 "영역"이 있으며 다음 섹션에서 살펴 보겠습니다.
실시 예
이제 PHP에서 변수 범위의 기본 사항을 알았으므로 이제 실제 코드 예제로 이동하여 다양한 상황에서 어떻게 적용되는지 살펴 보겠습니다.
지역 변수
위의 실제 코드 예제를 추적하려면 – 로컬 변수는 정의 된 코드 블록 안에 만 존재하며 이 경계 외부에서 한 번 사라집니다.
function foo () { $cate = "Evil One"; // This is a local variable echo $cate; // $cate will only exist inside function foo() } foo(); echo $cate; // $cate does not exist outside the function
글로벌 변수
$doge = "Good Boy"; // This is a global variable function foo () { $cate = "Evil One"; // This is a local variable echo $cate; // $cate will only exist inside function foo() echo $doge; // $doge does not exist inside function foo() } foo(); echo $cate; // $cate does not exist outside the function echo $doge; // $doge exist in the global space
처음에는 다소 혼란스러워 보일 수 있지만 실제로는 매우 간단한 규칙입니다.
함수 매개 변수
그렇다면… 함수 안에서 전역 변수를 사용해야 한다면 어떻게 해야 합니까? 변수를 "외부에서 내부로"전달해야 하는 경우 어떻게 해야 합니까? 이미 알고 계실 것입니다.
$doge = "Good Boy"; // This is a global variable function foo ($vs) { $cate = "Evil One"; // This is a local variable echo $cate . " VS " . $vs; } // We pass the global variable into the function via parameters foo($doge); echo $vs; // $vs is also a local variable
함수 매개 변수는 "내부 외부"간의 인터페이스와 비슷하며 때로는 "인수"라고도 합니다. 함수 매개 변수에도 로컬 범위가 있습니다.
글로벌 키워드
또는 함수 내에서 전역 키워드를 사용하여 전역 변수를 함수에 "풀"할 수 있습니다.
$doge = "Good Boy"; function foo () { global $doge; // Rope the doge in $cate = "Evil One"; echo $cate; echo $doge; } foo();
그러나 이것은 권장되지 않으며 아래 이유를 살펴 보겠습니다.
글로벌 vs 파라미터
$doge = "Good Boy"; // The global variable // Parameters - Does not affect global variables function param ($vs) { $cate = "Evil One"; echo "Via parameter - " . $cate . " VS " . $vs . "<br>"; $vs = "FOOBAR!"; // This will not affect $doge in any way } param($doge); echo "After parameter function - " . $doge . "<br>"; // Global keyword - Directly affects global variables function useglobal () { global $doge; $cate = "Evil One"; $doge = "Weak Pupper"; // This changes the value of global var echo "Via global - " . $cate . " VS " . $doge . "<br>"; } useglobal(); echo "After useglobal function - " . $doge . "<br>";
글로벌 키워드를 사용하지 않는 이유는 무엇입니까? 이 내부 범위 밖의 일에 대한 모든 아이디어는 우려의 분리이기 때문입니다. 함수 내부에서 일어나는 일이 외부에 직접적인 영향을 미치지 않아야 합니다.
실수로 전역 변수의 값을 변경하고 싶지 않은 경우 다른 값을 잘못 사용하고 싶습니다. 따라서 이 점에 특히 주의하십시오. 확실 할 때만 글로벌 키워드를 사용하십시오. 그렇지 않은 경우 항상 매개 변수를 전달하고 return을 사용하여 처리 된 값을 모두 전달하십시오.
정적 변수
앞에서 언급 한 범위의 "최종 유형"에 대해서는 조금 더 흥미롭습니다.
// NON-STATIC VARIABLES function nostatic () { $count = 0; $count++; echo $count . "<br>"; } echo nostatic(); // 1 echo nostatic(); // 1 // STATIC VARIABLES function isstatic () { static $count = 0; $count++; echo $count . "<br>"; } echo isstatic(); // 1 echo isstatic(); // 2 echo isstatic(); // 3 echo $count; // But static variables are still local scoped
그러나 정적 변수는 로컬 변수이기도 합니다. 이전 실행 값을 유지하는 것을 제외하고는.
포함 된 파일 경계
작은 추가 엑스트라에 관해서는 포함 된 스크립트의 범위가 스크립트의 위치에 따릅니다.
$doge = "Good boy";
function foo () { include '7a-doge.php'; echo $doge; // Exist } foo(); echo $doge; // Does not exist
include '7a-doge.php'; function foo () { echo $doge; // Does not exist } foo(); echo $doge; // Exist
유용한 비트
이것이 이 프로젝트의 전부이며, 여기에 도움이 될만한 추가 정보에 대한 작은 섹션이 있습니다.
INFOGRAPHIC
참조
등록된 댓글이 없습니다.