我知道我們總是必須在最後關閉db連接。讓我們有一個類,有四個方法,每個方法都由db查詢組成。現在我的問題是在哪裏創建和關閉數據庫連接?
我應該創建一個連接並關閉它在每個不同的方法 或在類的構造函數中創建連接?如果我在構造函數中創建了 連接,那麼我將在哪裏關閉它。因爲 如果我在任何函數中關閉它,沒有其他方法可以訪問它。
如果我爲每種方法創建新的連接,則沒有連接可能會非常高。然後我將在哪裏創建和關閉功能的正確方法?
我知道我們總是必須在最後關閉db連接。讓我們有一個類,有四個方法,每個方法都由db查詢組成。現在我的問題是在哪裏創建和關閉數據庫連接?
我應該創建一個連接並關閉它在每個不同的方法 或在類的構造函數中創建連接?如果我在構造函數中創建了 連接,那麼我將在哪裏關閉它。因爲 如果我在任何函數中關閉它,沒有其他方法可以訪問它。
如果我爲每種方法創建新的連接,則沒有連接可能會非常高。然後我將在哪裏創建和關閉功能的正確方法?
由於php的引用計數系統沒有必要關閉連接,它會自動釋放(除非你打開持久數據庫鏈接),所以它不應該引起頭痛。
你應該只打開一次連接一次。
如果你打開它,那麼你需要關閉它。
只要關閉連接,就可以將其關閉。看起來你的結局可能更多的是關於程序設計的過程。僅僅因爲數據庫調用使用連接並不意味着它必須在那裏打開和關閉。
假設您可能想要重用持有連接的$ mysqli變量。您可以將該連接傳遞給一個函數,並將其返回或關閉。通過這種方式,您可以在函數主體中隔離數據庫調用的主要活動,而無需擔心太多的開啓和關閉所有內容。
使用該技術,可以重複使用多個查詢的連接,每個查詢都包含它們各自的方法。如果需要的話,也許你會更好地打開一個類並傳遞一個$ mysqli連接。
這取決於您的計劃和您的選擇如何工作。
如果您正在開發一個程序,並且您對打開和關閉操作的影響感到好奇,則可以撥打http://php.net/manual/en/mysqli.stat.php或類似的功能。如果你打開很多線程而不關閉它們,那麼你會在mysqli_stat()的回答中看到線程數量增加。
例如,如果您設計的設計較差的查詢遠離您,調用可能無法關閉;連接對象的範圍應該與腳本的結尾自然關閉。
請考慮交易概念。舉例來說,如果你的方法是按順序調用的,打開一個連接並保持打開是合理的 如果其他方法的調用有延遲,我不會建議你保持連接暫停,特別是如果有多個人打算訪問應用程序
最好的方法是將implement classes
和extend
它到你的functional class
包含methods
。Constructor
的擴展類可以通過call to
和connection
函數和析構函數在對象設置爲NULL時調用斷開連接。
或者
至於你的問題的狀態,在基類中兩個功能有建築等具有破壞。 在使用連接之前調用構造函數,並在使用後將其銷燬。 實施例將是:
class bar{
protected function connect(){
#connect to db
}
protected function disconnect(){
#disconnect db
}
class foo extends bar{
function func1() {
$this->connect();
#Code
$this->disconnect();
}
function func2() {
$this->connect();
#Code
$this->disconnect();
}
function func3() {
$this->connect();
#Code
$this->disconnect();
}
function func4() {
$this->connect();
#Code
$this->disconnect();
}
?>
代替手動管理數據庫連接,可以考慮使用[數據庫連接池(http://stackoverflow.com/questions/4041114/what-is-database-pooling)。 – azurefrog
使用析構函數。 – Mickey