2013-07-09 26 views
0

最佳後拋出異常時的例子來解釋它是在PHP安全嗎? $ ch將被正確處理。curl_init

如果不是,我可以將$ch更改爲類變量,並在析構函數中銷燬。

想法?在此先感謝

回答

4

$ch將超出範圍,從而有資格進行垃圾回收。當發生這種情況時,資源將被正確釋放並關閉。至少當腳本執行結束時,所有資源都將被正確處置。因此,手動關閉資源並非真的需要;但保持資源使用盡可能低是一種很好的做法,尤其是對於長時間運行的腳本。

PHP 5.5的功能try..catch..finally,它允許你總是關閉這樣的資源,即使在拋出異常的情況下。 (我剛剛意識到這並不適用於這種情況。)

+0

+1,這是非常翔實的,尤其是5.5的東西,謝謝! – Jimbo

+0

我想我可以在自己的類中包裝捲曲,並讓超出範圍處理破壞或將會過度殺傷? –

+1

@天使矯枉過正。正如我所說的,當資源超出範圍時,資源已經自動釋放,將這個已經存在的功能封裝在另一個類中是毫無意義的。 – deceze

1

您將要在拋出異常之前關閉句柄。

if (!$response) 
{ 
    curl_close($ch); 
    throw new Exception('Boom! No response...'); 
} 

當你拋出一個異常,它會停止在該節和氣泡一直到那裏你抓住它執行任何更多的代碼的,不然你會:

Fatal error: Uncaught exception 

在另一方面,如果你不要關閉句柄,那真的不是大問題。只是不要養成這樣的習慣;)

但是,再次查看你的代碼,你的異常沒有任何意義。您已關閉它在這種情況下...

+0

爲什麼它沒有意義? –

+0

因爲拋出的異常說你沒有關閉'$ ch',但是前面的if語句不檢查你是否關閉了'$ ch' :) – Jimbo

+0

異常描述是描述性的以獲得我的觀點不過,它會引發響應失敗。因此,爲什麼我想知道如果我拋出一個異常並且不會關閉卷曲,PHP會正確清理 –