소멸자 (__destruct)
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 8번째.
__destruct 메서드는 객체가 소멸될 때 자동으로 호출되는 특별한 메서드입니다. 객체에 대한 참조가 더 이상 없거나 스크립트가 종료될 때 객체가 소멸됩니다.
다음은 생성자와 소멸자를 모두 포함하는 클래스의 예입니다:
<?php
class Resource {
public $name;
public function __construct($name) {
$this->name = $name;
echo $this->name . " was created\n";
}
public function __destruct() {
echo $this->name . " was destroyed\n";
}
}객체를 생성하고 생명주기를 관찰합니다:
echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r); // 객체를 명시적으로 소멸시킵니다
echo "=== End ===\n";출력:
=== Start ===
Connection was created
Using Connection
Connection was destroyed
=== End ===unset() 함수는 객체에 대한 참조를 제거하여 즉시 소멸자를 호출합니다.
unset()을 호출하지 않으면, 스크립트가 종료될 때 소멸자가 자동으로 실행됩니다:
$r = new Resource("Logger");
echo "Working...\n";
// 스크립트 종료 시 __destruct가 자동으로 호출됩니다출력:
Logger was created
Working...
Logger was destroyed핵심 포인트: __destruct 메서드는 객체가 더 이상 필요하지 않을 때 파일 닫기, 리소스 해제 또는 로깅과 같은 정리 작업에 유용합니다.
챌린지
중급resource.php 파일의 Resource 클래스를 완성하세요:
$name을 인자로 받아 속성으로 설정하고,"[name] was created"를 출력하는__construct메서드를 추가합니다.$message를 인자로 받아"Log: [message]"를 출력하는logMessage메서드를 추가합니다."[name] was destroyed"를 출력하는__destruct메서드를 추가합니다.
driver.php 파일은 Resource 객체의 생명주기(lifecycle)를 테스트합니다.
치트 시트
__destruct 메서드는 객체가 소멸될 때(해당 객체에 대한 참조가 더 이상 없거나 스크립트가 종료될 때) 자동으로 호출됩니다.
생성자와 소멸자가 포함된 클래스의 예:
<?php
class Resource {
public $name;
public function __construct($name) {
$this->name = $name;
echo $this->name . " was created\n";
}
public function __destruct() {
echo $this->name . " was destroyed\n";
}
}unset() 함수는 객체에 대한 참조를 제거하여 즉시 소멸자를 트리거합니다:
$r = new Resource("Connection");
unset($r); // explicitly destroy the objectunset()이 호출되지 않으면 스크립트가 종료될 때 소멸자가 자동으로 실행됩니다.
__destruct 메서드는 파일 닫기, 리소스 해제 또는 로깅과 같은 정리 작업에 유용합니다.
직접 해보기
<?php
require_once 'resource.php';
$testCase = trim(fgets(STDIN));
if ($testCase == "basic_test") {
echo "=== Start ===\n";
$r = new Resource("FileHandler");
echo "Using " . $r->name . "\n";
unset($r);
echo "=== End ===\n";
} elseif ($testCase == "auto_destruct_test") {
$r = new Resource("Logger");
$r->logMessage("Application started");
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션