PHP 약인용 요약
약인용
약한 인용은 프로그래머가 대상에 대한 인용을 보류할 수 있으며, 이 대상은 대상이 소각되는 것을 막지 못한다.그것들은 유사한 캐시를 실현하는 구조에 매우 유용하다.
이것은 비교적 공식적인 해석이다.이 설명에서 알 수 있듯이 약인용도 일종의 인용 형식이다. 그러나 만약에 우리가 원래의 대상을 소각한다면 약인용 대상도 소각될 것이다. 마치 일반적인 값 대상의 값과 같다.만약 이전의 글을 보지 못했거나 PHP의 인용에 익숙하지 않은 친구는 PHP의 인용에 관한 지식을 좀 더 알아야 할 수도 있다.다음은 우리가 직접 예시를 통해 한번 봅시다.
WeakReference
$obj = new stdClass;
$weakref = $obj;
var_dump($weakref);
// object(stdClass)#1 (0) {
// }
unset($obj);
var_dump($weakref);
// object(stdClass)#1 (0) {
// }
$obj1 = new stdClass;
$weakref = WeakReference::create($obj1);
var_dump($weakref->get());
// object(stdClass)#2 (0) {
// }
unset($obj1);
var_dump($weakref->get());
// NULL
$weakref = WeakReference::create(new stdClass);
var_dump($weakref->get());
// NULL
첫 번째 객체\$obj PHP 기본 객체 값인 직접 할당 참조를 수행합니다.이때 $weakref는 대상 기호표의 인용을 저장합니다.우리가 unset () 에서 $obj를 떨어뜨렸을 때, $weakref는 여전히 정상적으로 사용할 수 있습니다.즉, $weakref는 $obj의 원시 대상에 대한 메모리 인용을 여전히 유지하고 있다.우리가 아무리 unset () 원시적인 $obj를 사용하더라도 $obj의 인용 기호표를 차단했을 뿐, 진정한 대상에 영향을 주지 않으며, 쓰레기 수거기는 가장 원시적인 $obj 대상의 내용을 철저하게 회수하지 않습니다.두 번째 대상은 우리가 사용하는 WeakReference의create () 방법으로 만든 약한 인용입니다. $obj1을 삭제하면 $weakref도 NULL이 됩니다.이것이 바로 약한 인용의 작용이다!
쓰레기 수거기를 정상적으로 회수할 수 있으며, 순환 인용으로 인한 메모리 유출 문제를 피할 수 있으며, 인용을 C의 바늘 조작과 유사하게 표현할 수 있다.
마지막 코드는 WeakReference::create()에서 new를 사용하여 대상을 만드는 것입니다.이런 형식은 안 돼요. 계속 NULL로 돌아갈 거예요.약한 인용은 변수를 통해 만들어지기 때문에 원시 대상의 기호표를 가리키고, 변수와 대상 간의 기호표 연결이야말로 약한 인용이 관심을 가지는 내용이기 때문에 기호표의 상태에 따라 현재의 상태를 판단할 수 있다.만약 원시 대상 변수가 기호표와의 연결을 끊었다면 약한 인용 변수도 동시에 끊었을 것이다. 그러면 쓰레기 수거기는 이 인용 계수가 없는 대상을 정상적으로 정리할 수 있을 것이다.
주의하다
여기서 주의해야 할 것은 위의 테스트 코드는 반드시 PHP7.4 및 상기 버전에서만 유용해야 한다는 것이다. WeakReference 클래스는 PHP7.4에 새로 추가된 내용이다.이전 버전은 WeakRef라는 확장을 설치해야만 약한 인용 능력을 실현할 수 있으며, 구체적인 내용은 아래 링크의 관련 문서를 볼 수 있습니다.
테스트 코드:
https://github.com/zhangyue0503...
이상은 PHP 약인용과 관련된 총결산의 상세한 내용입니다. 더 많은 PHP 약인용에 관한 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.