질문 1: 질문은 말씀드린대로 제가 직접 테스트해봤습니다
class Obj{ public $i; public function construct($t){ $this->i = $t; echo "执行构造函数$this->i"; echo "<br>"; } public function destruct(){ echo "执行析构函数$this->i"; echo "<br>"; } } $obj1 = new Obj(1); $obj2 = new Obj(2); 执行构造函数1执行构造函数2执行析构函数2执行析构函数1
질문 2: 하위 클래스에서 상위 클래스의 생성자 메서드를 호출할 때 상위 클래스만 초기화하고, 객체를 생성하는 건가요? 부모 클래스의?
======================================업데이트========= =============================
더 이해하기 쉬운 설명 찾기:
데이터를 저장하기 위해 힙을 사용할지 아니면 스택을 사용할지 여부 PHP에 의해 결정되며, PHP 개발자는 신경 쓸 필요가 없습니다.
전송:
PHP5의 Zend 엔진 구현에서는 모든 값이 힙에 할당된 공간이며 참조 카운팅 및 가비지 수집을 통해 관리됩니다.
PHP5의 zval 구조에 대한 Zend 엔진 포인터는 주로 값을 연산하는 데 사용되며, 많은 곳에서 zval의 보조 포인터를 통해 연산됩니다.
PHP7의 Zend 엔진 구현에서는 값이 zval 구조 자체를 통해 연산됩니다. (포인터 아님) zval 구조는 VM 스택, HashTable 버킷 및 속성 슬롯에 직접 저장되며, 이는 힙에 메모리를 할당하고 해제하는 작업을 크게 줄입니다. 단순 값의 참조 계산 및 가비지 수집을 방지합니다.
=================================== UPDATE1========== ============================
먼저 인스턴스화된 개체가 나중에 해제되는 이유를 설명합니다.
执行构造函数1 执行构造函数1 执行析构函数2 执行析构函数2
객체 지향
언어와 유사한 소멸자 개념을 도입했는지 알고 싶었습니다. 소멸자는 객체에 대한 모든 참조가 삭제되거나 객체가 명시적으로 소멸될 때 실행됩니다즉, 프로세스는 다음과 같습니다Obj(1) 启动,申请自己的内存空间与上下文环境
Obj(2) 启动,申请自己的内存空间与上下文环境
Obj(2) 销毁,垃圾回收
Obj(1) 销毁,垃圾回收
---------------------------- Obj(1) Obj(2) Obj(2) Obj(1) ----------------------------
위 내용은 PHP가 먼저 인스턴스화된 객체의 소멸자를 실행하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!