댓글 검색 목록

[php] PHP 변수 범위 – 심층적인 안내서

페이지 정보

작성자 운영자 작성일 20-04-20 09:14 조회 1,028 댓글 0

신비한 변수 


PHP 변수 범위에 대한 초보자 자습서에 오신 것을 환영합니다. 함수에서 변수를 정의하려고 시도한 후 나중에 신비하게 "사라지는"것을 본 적이 있습니까? PHP의 버그가 아니며 악의적 인 외계인에 의해 납치되지 않았으므로 안심하십시오. 이것은 "가변 범위 (variable scope)"라는 메커니즘이며, PHP가 메모리 소비를 관리하고 혼동을 줄이는 방법 중 하나입니다.


  • 지역 변수는 함수 내에서 정의되며 그 안에 만 존재합니다.
  • 전역 변수는 함수 외부에서 정의 된 변수를 말하며 함수 외부에만 존재합니다.
  • 지역 변수는 일반적으로 함수가 완료되면 삭제됩니다. 그러나 정적 변수는 값을 유지합니다.
  • 함수 변수 (또는 매개 변수)는 외부 함수에서 내부로 값을 전달하는 데 사용됩니다.

그러나 이 모든 특수 효과가 어떻게 작동합니까? 무엇을 찾아야 합니까? 알아 보려면 계속 읽으십시오!


ⓘ이 튜토리얼을 시작할 때 모든 예제 소스 코드가 포함 된 zip 파일을 포함 시켰으므로 모든 내용을 복사하여 붙여 넣을 필요가 없습니다.


예제 코드 다운로드 


먼저 약속 한대로 소스 코드에 대한 다운로드 링크가 있습니다.


소스 코드 다운로드 


모든 예제 소스 코드를 다운로드하려면 여기를 클릭하십시오. MIT 라이센스에 따라 릴리스 했으므로 코드 위에 빌드하거나 자신의 프로젝트에서 자유롭게 사용할 수 있습니다.


빠른 시작 


  • 폴더에 다운로드하여 압축을 풉니다.
  • 관련된 데이터베이스가 없으므로 포함 된 각 파일을 따라 가십시오.

기본 


변수 범위의 작동 방식에 대한 실제 코드 예제로 이동하기 전에 기본 사항에 대한 섹션이 있습니다. 변수 범위 란 무엇이고 어떤 역할을 하며 무엇이 좋은지에 대한 것입니다.


가변 범위 란 무엇입니까? 


오래된 위키 백과에서 간단히 인용하겠습니다.


컴퓨터 프로그래밍에서 이름 바인딩의 범위 (예 : 변수와 ​​같은 엔티티와 이름의 연관)는 바인딩이 유효한 컴퓨터 프로그램의 영역입니다. 여기서 이름은 엔티티를 참조하는 데 사용될 수 있습니다. 이러한 영역을 스코프 블록이라고 합니다. 


그렇습니다. PHP에서 변수 범위가 무엇인지에 대한 좋은 아이디어입니다. 평신도 용어에서, 변수는 스코프 블록으로 알려진 특정 유효 영역 내에 만 존재하며, 변수는 한 번 사라집니다. 예를 들어 함수 안에 변수를 정의 할 때 :


  • 변수는 해당 기능 내에서만 유효합니다.
  • 함수가 종료되면 이 변수는 사라집니다.
  • 함수는 변수의 범위 블록이라고 합니다.

변수 범위가 무엇입니까? 


그렇다면 왜 가변 범위와 같은 것이 있습니까? 변수가 사라지지 않고 모든 곳에 존재한다면 더 좋지 않을까요? 음 ... 아니.


  • 대규모 프로젝트에서는 수백 가지 기능과 프레임 워크를 쉽게 사용할 수 있습니다. 수천 개의 변수가 떠 다니는 것은 혼란입니다.
  • 코드 닌자가 혼란스러운 닌자가 되는 것을 방지하기 위해 가변 범위는 특정 고정 영역에서만 유효하도록 유지하는 데 필수적입니다.
  • 변수 범위는 PHP에서 메모리 관리의 일부이기도 합니다. 관련 없는 임시 변수가 더 이상 적용되지 않으면 제거됩니다.


PHP에서 범위를 어떻게 정의합니까? 


변수의 범위를 정의 할 수 있는 두 가지 방법이 있습니다. 구체적으로 변수를 정의하거나 스크립트에서 변수를 자연스럽게 배치함으로써 가능합니다. PHP에는 일반적으로 4 개의 변수 범위 "영역"이 있으며 다음 섹션에서 살펴 보겠습니다.


  • Local variables
  • Global variables
  • Function parameters
  • Static variables


실시 예 


이제 PHP에서 변수 범위의 기본 사항을 알았으므로 이제 실제 코드 예제로 이동하여 다양한 상황에서 어떻게 적용되는지 살펴 보겠습니다.


지역 변수 


위의 실제 코드 예제를 추적하려면 – 로컬 변수는 정의 된 코드 블록 안에 만 존재하며 이 경계 외부에서 한 번 사라집니다.

<?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 ?> 


글로벌 변수 


<?php $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 ?> 


처음에는 다소 혼란스러워 보일 수 있지만 실제로는 매우 간단한 규칙입니다.


  • 함수 내부의 변수는 내부에서만 사용할 수 있습니다.
  • 함수 외부의 변수는 외부에서 사용할 수 있습니다.
  • 안에 있는 것이 무엇이든 안에 있습니다. 외부에 있는 것은 외부에 있습니다.


함수 매개 변수 


그렇다면… 함수 안에서 전역 변수를 사용해야 한다면 어떻게 해야 합니까? 변수를 "외부에서 내부로"전달해야 하는 경우 어떻게 해야 합니까? 이미 알고 계실 것입니다.


<?php $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 ?> 


함수 매개 변수는 "내부 외부"간의 인터페이스와 비슷하며 때로는 "인수"라고도 합니다. 함수 매개 변수에도 로컬 범위가 있습니다.


글로벌 키워드 


또는 함수 내에서 전역 키워드를 사용하여 전역 변수를 함수에 "풀"할 수 있습니다.


<?php $doge = "Good Boy"; function foo () { global $doge; // Rope the doge in $cate = "Evil One"; echo $cate; echo $doge; } foo(); ?> 


그러나 이것은 권장되지 않으며 아래 이유를 살펴 보겠습니다.


글로벌 vs 파라미터 


<?php $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을 사용하여 처리 된 값을 모두 전달하십시오.


정적 변수 


앞에서 언급 한 범위의 "최종 유형"에 대해서는 조금 더 흥미롭습니다.


<?php // 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 ?> 


그러나 정적 변수는 로컬 변수이기도 합니다. 이전 실행 값을 유지하는 것을 제외하고는.


포함 된 파일 경계 


작은 추가 엑스트라에 관해서는 포함 된 스크립트의 범위가 스크립트의 위치에 따릅니다.


<?php $doge = "Good boy"; ?> 


<?php function foo () { include '7a-doge.php'; echo $doge; // Exist } foo(); echo $doge; // Does not exist ?> 


<?php include '7a-doge.php'; function foo () { echo $doge; // Does not exist } foo(); echo $doge; // Exist ?> 


유용한 비트 


이것이 이 프로젝트의 전부이며, 여기에 도움이 될만한 추가 정보에 대한 작은 섹션이 있습니다.


INFOGRAPHIC 


php-var-scope-small.jpg 


참조 



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.