2010-04-11 60 views

回答

10

它給物體一個準備被殺死的機會。這可能意味着手動清理,狀態持久化等。

例如,模型可能想要將其當前所有屬性保存回數據庫。

或者,數據庫對象本身可能想要關閉它用來與數據庫服務器通信的套接字。

+1

- 它也用於清理:D – Hanseh 2010-04-11 20:03:53

+4

另外,需要注意的是__destruct不僅被調用,而且被刪除的對象被調用,而且當對象超出範圍時以及腳本結束時 – deadkarma 2010-04-11 20:21:41

2

假設我有一個Result類,它是mysqli_result對象的包裝器(實現Iterator,以及其他細節)。當我銷燬我的一個Result對象時,我想確保在mysqli_result對象上調用free()方法來回收它正在使用的內存。所以我在我的Result課的破壞者中這樣做。

3

所以,你可能知道什麼是構造函數。如果構造函數設置,析構函數會清除。這裏有一個來自PHP站點的例子:

<?php 
class my_class { 
    public $error_reporting = false; 

    function __construct($error_reporting = false) { 
    $this->error_reporting = $error_reporting; 
    } 

    function __destruct() { 
    if($this->error_reporting === true) $this->show_report(); 
    unset($this->error_reporting); 
    } 
?> 

Here's the link到PHP文檔的主題。

+0

爲什麼它甚至需要刪除任何東西。如果對象被破壞,引用也會被破壞,並且當沒有更多的引用時,它所依賴的對象也不會被引用,所以這些依賴關係的析構函數將被調用。 – Hafiz 2017-11-15 13:01:18

相關問題