programing tip

물건을 파괴하는 방법?

itbloger 2020. 8. 4. 07:47
반응형

물건을 파괴하는 방법?


내가 아는 한 (아주 작은) 두 가지 방법이 있습니다.

$var = new object()

그때:

// Method 1: Set to null
$var = null;
// Method 2: Unset 
unset($var); 

다른 더 좋은 방법? 머리카락을 나누고 있습니까?


찾고 있습니다 unset().

그러나 객체를 명시 적으로 파괴 할 수 없다는 점을 고려하십시오 .

객체를 설정 해제하고 스크립트가 PHP를 메모리 제한으로 푸시하면 불필요한 객체는 가비지 수집됩니다. unset()더 나은 성능 (테스트되지 않았지만 PHP 공식 매뉴얼 의 의견 중 하나에 문서화 됨)이있는 것처럼 null로 설정하는 것과 함께 갈 입니다.

즉, PHP는 페이지가 제공되는 즉시 항상 객체를 파괴한다는 것을 명심하십시오. 따라서 이것은 실제로 긴 루프 및 / 또는 집중적 인 페이지에만 필요합니다.


이것에 대한 몇 가지 오해를 설명하는 편리한 게시물 :

소멸자를 명시 적으로 호출하지 마십시오

여기에는 소멸자가 작동하는 방식에 대한 몇 가지 오해가 포함됩니다. PHP5 문서에 따르면 명시 적으로 호출하면 실제로 변수가 파괴되지 않습니다.

PHP 5는 C ++과 같은 다른 객체 지향 언어와 유사한 소멸자 개념을 도입했습니다. 소멸자 메소드는 특정 오브젝트에 대한 다른 참조가 없거나 종료 순서 중에 순서에 관계없이 호출됩니다.

위의 게시물은 변수를 null로 설정하면 할당 된 메모리를 가리키는 다른 것이 없으면 작동 할 수 있다고 말합니다.


짧은 대답 : 둘 다 필요합니다.

나는 정답이 제시되었지만 최소한으로 느껴지는 것 같습니다. 일반적으로 unset ()은 "speed"에 가장 적합하지만 즉시 CPU를 사용하여 메모리를 회수하려면 null을 사용해야합니다.

언급 한 다른 사람들과 마찬가지로 null로 설정한다고해서 모든 것이 회수되는 것은 아니며 객체의 파괴를 막는 공유 메모리 (클론되지 않은) 객체를 가질 수 있습니다. 또한 다른 사람들이 말했듯이 어쨌든 객체를 명시 적으로 "파괴"할 수 없으므로 어쨌든 시도해서는 안됩니다.

당신에게 가장 적합한 것을 알아 내야합니다. 또한 set 또는 null에서 호출 될 객체에 __destruct ()를 사용할 수 있지만 신중하게 사용해야하며 다른 사람들이 말했듯이 직접 호출하지 마십시오!

보다:

http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/

NULL 할당과 설정 해제의 차이점은 무엇입니까?


이것은 객체를 파괴 할 수 없으며 링크 만 파괴 할 수 있다는 단순한 증거입니다.

$var = (object)['a'=>1];
$var2 = $var;
$var2->a = 2;
unset($var2);
echo $var->a;

보고

2

https://eval.in/1054130 에서 실제 작업을 확인하십시오.


새로운 mysqli 객체를 생성하는 상황에있을 수 있습니다.

$MyConnection = new mysqli($hn, $un, $pw, $db);

하지만 개체를 ​​닫은 후에도

$MyConnection->close();

print_r()의 내용을 확인하는 데 사용하면 다음 $MyConnection과 같은 오류가 발생합니다.

Error:
mysqli Object

Warning: print_r(): Property access is not allowed yet in /path/to/program on line ..
( [affected_rows] => [client_info] => [client_version] =>.................)

이 경우 경로 이름 문자열이 필요하지만이 경우 에는 Object unlink()이기 때문에 사용할 수 없습니다 .unlink()$MyConnection

따라서 값을 null로 설정하는 또 다른 선택이 있습니다.

$MyConnection = null;

이제 예상대로 일이 올바르게 진행됩니다. 변수 내에 내용이 없으며 $MyConnection이미 mysqli 객체를 정리했습니다.

It's a recommended practice to close the Object before setting the value of your variable to null.


I would go with unset because it might give the garbage collector a better hint so that the memory can be available again sooner. Be careful that any things the object points to either have other references or get unset first or you really will have to wait on the garbage collector since there would then be no handles to them.

참고URL : https://stackoverflow.com/questions/8798443/how-to-destroy-an-object

반응형