php 문제 좀 물어보세요 destructor
<?php class a{ static $ss=null; function ff($p){ self::$ss=$p; return self::$ss; } function destruct(){ echo "一二三"; } } $rrrr=new a(); echo $rrrr->ff(4444); $aaaa=new a(); echo $aaaa->ff(55555);
===========================
출력 결과: 444455555 하나 둘 셋 하나 two three
=====================
제가 묻고 싶은 것은 객체가 파괴된 후에 소멸자가 실행되는 것이 아닌가요? $rrrr 객체가 실행되면 $aaaa 객체가 파괴되어야 합니다. 이 파괴 후에 소멸자는 "one two three"를 출력해야 합니다. 그러나 우리가 보는 결과는 444455555 one two three one two three입니다. 결과는 4444 하나 둘 셋 55555 하나 둘 셋 이여야 할 것 같아요
그렇지 않아요. unset($rrrr)은 객체 파괴를 유발할 수 있지만 new a()는 그렇지 않습니다. 방금 두 개의 a 인스턴스를 얻었고 삭제를 수행하지 않았습니다.
페이지 방문이 끝나면 php는 자동으로 $rrrr 및 $aaaa 인스턴스를 소멸하므로 1, 2, 3이 연속으로 두 번 출력됩니다.
고마워요. 그런데 이게 단일 케이스 모드입니다.
static $ss 클래스 변수를 재할당하면 이전 변수가 파괴되지 않나요?
이봐, 당신은 싱글톤 모드가 아니군요... static properties를 가진 평범한 객체이며, 싱글톤 모드에서도 소멸자는 사용되지 않습니다. 프로그램을 배울 때 매우 주의해야 하며 세부 사항이 매우 중요합니다. 이것이 싱글톤
class singleDemo { protected static $instance = false; protected construct() { } public static function getInstance() { if (! self::$instance instanceof self) { self::$instance = new self(); } return self::$instance; } }
싱글톤입니다. 즉, 동일한 인스턴스만 운영할 수 있다는 뜻입니다. 이것에 대해 이야기하려면 너무 많은 단어가 필요합니다. 싱글톤 모드를 알고 있으므로 해당 모드에 대한 설명으로 바로 이동하세요
소멸자는 객체가 소멸될 때 호출되는 코드입니다.
이 개체가 모두 사용되면 이 함수의 명령문이 자동으로 실행됩니다.
이 개체는 전체 파일에 사용되지 않았습니다. 55555를 출력한 후에만 사용됩니다. 두 번 호출되기 때문에 끝에는 두 개, 두 개, 세 개가 있습니다! 채택하시길 바랍니다!
위 내용은 PHP 소멸자 문제?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!