>  기사  >  백엔드 개발  >  PHP 소멸자 문제?

PHP 소멸자 문제?

黄舟
黄舟원래의
2017-07-02 10:31:151418검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.