널리 사용되는 프로그래밍 언어로서 PHP의 기본 운영 메커니즘은 항상 개발자의 관심의 초점이었습니다. 이 기사는 PHP7의 기본 개발 원칙에 대해 자세히 설명하고 기능 호출 및 가변 할당의 구현에 중점을 둘 것입니다.
PHP7에서는 호출 스택을 통해 기능 호출이 관리됩니다. Call Stack은 최후의 첫 번째 출력 (LIFO) 데이터 구조로, 함수 이름 및 매개 변수와 같은 각 기능 호출 중에 관련 정보를 저장하는 데 사용됩니다. 함수가 실행되면 관련 정보가 스택 상단에서 제거됩니다.
다음은 기능 호출의 예입니다.
function foo($a, $b) {
return $a + $b;
}
$result = foo(1, 2);
실행 중 통화 스택 변경 : 프로그램 시작시 호출 스택이 비어 있습니다. FOO 함수를 호출 할 때 함수 정보가 스택의 상단으로 푸시됩니다. 함수가 실행 된 후에는 스택 상단에서 정보가 팝업되어 결과를 반환합니다.
PHP7 함수는 여러 실질적인 인수 전달 방법을 지원합니다.
참조 통과 예 :
function foo(&$a) {
$a = 2;
}
$b = 1;
foo($b);
echo $b; // 산출2
FOO는 FOO가 변수 $ B의 주소를 수신하므로 공식 매개 변수의 수정은 실제 매개 변수에 직접 영향을 미칩니다.
PHP7에서 가변 할당은 참조 계산을 사용하여 메모리를 관리합니다. 참조 수가 변수가 참조되는 횟수를 기록합니다. 카운트가 0으로 돌아 오면 관련 메모리가 해제됩니다.
값을 할당 할 때 변수 참조 카운트가 1 인 경우 변수 값이 직접 업데이트됩니다. 1보다 큰 경우 원래 값이 복사되고 새 값이 할당되며 이전 메모리는 쓰레기 수집에 의해 처리됩니다.
샘플 코드 :
$a = 1;
$b = $a;
$c = &$a;
echo $a, $b, $c; // 산출111
$a = 2;
echo $a, $b, $c; // 산출212
$ b에 할당 될 때, $ a 및 $ b는 동일한 데이터 사본을 가리 킵니다. $ C는 $ a에 대한 참조입니다. $ a를 수정할 때 $ c는 동기식으로 업데이트되며 $ B는 원래 값으로 남아 있습니다.
기준 계수는 원형 참조를 해결하지 못하여 메모리 누출이 발생합니다. 이를 위해 PHP7은 태그 청소장 수집 메커니즘을 소개합니다.
가변 참조 수가 0이면 쓰레기로 표시됩니다. 쓰레기 수집 메커니즘은 루트 세트 (예 : 글로벌 변수 및 로컬 변수)를 통과하여 도달 가능한 물체를 표시합니다. 표시되지 않은 것은 쓰레기이며 기억을 해제합니다.
순환 참조의 예 :
class A {
public $b;
}
class B {
public $a;
}
$a = new A;
$b = new B;
$a->b = $b;
$b->a = $a;
unset($a, $b);
여기서 $ a와 $ b는 서로를 참조하여 참조 수가 0으로 재설정되지 않습니다. UNSET가 실행 된 후, 쓰레기 수집 메커니즘은 접근 할 수없는 원형 참조를 감지하고 적시에 메모리를 재활용합니다.
PHP7의 기본 개발 원리, 특히 기능 호출 및 가변 할당 메커니즘에 대한 깊은 이해는 PHP 개발 효율성 및 성능 최적화를 향상시키는 데 큰 의미가 있습니다. 이 기사는 콜 스택 관리, 실제 매개 변수 전달 방법, 참조 계산 및 쓰레기 수집 메커니즘의 관리에 중점을 두어 개발자가 PHP7 운영의 세부 사항을보다 포괄적으로 파악할 수 있도록 도와줍니다.