php對象銷毀
㈠ php面向對象編程的Public和construct和destruct都有什麼作用
前面是構造方法,後面的是析構方法,前面的是實例化對象的時候最開始調用的,可以調用一些方法函數,設置一些屬性,後面的是對象銷毀之前調用的方法
㈡ php運行機制是什麼
PHP是一種純解釋型在服務端執行的可以內嵌HTML的腳本語言,尤其適合開發Web應用程序。
請求一個 PHP 腳本時,PHP 會讀取該腳本,並將其編譯為 Zend 操作碼,這是要執行的代碼的一種二進製表示形式。隨後,此操作碼由 PHP 執行並丟棄。 PHP腳本在每次被解釋時進行初始化,在解釋完畢後終止運行。這種運行是互相獨立的,每一次請求都會創建一個單獨的進程或線程,來解釋相應的頁面文件。頁面創建的變數和其他對象,都只在當前的頁面內部可見,無法跨越頁面訪問。在終止運行後,頁面中申請的、沒有被代碼顯式釋放的外部資源,包括內存、資料庫連接、文件句柄、Socket連接等,都會被強行釋放。也就是說,PHP無法在語言級別上實現直接訪問跨越頁面的變數,也無法創建駐留內存的對象。
PHP這種獨特的工作模型的優勢在於,基本上解決了令人頭疼的資源泄漏問題。Web應用的特點是大量的、短時間的並發處理,對各種資源的申請和釋放工作非常頻繁,很容易導致泄漏甚至崩潰。PHP的運行機制決定它不存在常規的崩潰問題(頂多連接超時腳本停止執行),可以說PHP是較穩定的Web應用。但是,這種機制的缺點也非常明顯。最直接的後果是,PHP在語言級別無法實現跨頁面的緩沖機制。這種緩沖機制缺失造成的影響,可以分成兩個方面:
一是對象的緩沖。眾所周知,很多設計模式都依賴於對象的緩沖機制,創建和銷毀對象是很費時間的,因為創建一個對象要獲取內存資源或者其它更多資源,對於需要頻繁應付大量並發的服務端軟體更是如此。因此,對象緩沖的缺失,理論上會極大地降低速度。應盡可能減少創建和銷毀對象的次數來提高服務程序的效率,由於 PHP目前還不支持多線程,也就無法像Java一樣通過線程池調度來彌補這一缺陷;但可以使用第三方軟體如Memcachd來實現PHP的對象緩沖機制,達到減少對象創建和銷毀的時間來提高服務程序的效率。Memcachd將PHP編譯後的 操作碼緩存並在內存中保存這個操作碼,並在下一次調用該頁面時重用它,這會節省很多時間。比較常用的緩存還有有 eAccelerator,另一種流行的 eAccelerator 替代工具是 Alternative PHP Cache(APC)。
二是資料庫連接的緩沖。對於Mysql,PHP提供了一種內置的資料庫緩沖機制,即用mysql_pconnect()代替mysql_connect() 來打開資料庫而已。PHP會自動回收被廢棄的資料庫連接,以供重復使用。在實際應用中,這種持久性資料庫連接往往會導致資料庫連接的偽泄漏現象:在某個時間,並發的資料庫連接過多,超過了MySQL的最大連接數,從而導致新的進程無法連接資料庫。但是過一段時間,當並發數減少時,PHP會釋放掉一些連接,網站又會恢復正常。出現這種現象的原因是,當使用pconnect時,Apache 的httpd進程會不釋放connect,而當Apache的httpd進程數超過了mysql的最大連接數時,就會出現無法連接的情況。因此,需要小心地調整Apache和Mysql的配置,以使Apache的httpd進程數不會超出MySQL的最大連接數。筆者經過實踐,在PHP5和 Oracle10g的連接中,由於頻於資料庫連接,有時候還會出現資料庫丟失連接的情況(Oracle官方有針對PHP的增強包,不知是否可以解決此問題,筆者未試)。
PHP的工作模型即是缺點也是優勢,從本質上說,這就是PHP 的獨特之處。
若以FastCGI模式運行php,解析php.ini、載入全部擴展並重初始化全部數據結構這些都只在進程啟動時發生一次。一個額外的好處是,持續資料庫連接可以工作。Nginx+PHP(FastCGI)是個不錯的選擇。
㈢ php clone對象什麼時候會銷毀對象
對象的復制是通過關鍵字 clone 來實現的。用 clone 克隆出來的對象與原對象沒有任何關系,它是把原來的對象從當前的位置重新復制了一份,也就是相當於在內存中新開辟了一塊空間。通過關鍵字 clone 可以克隆一個對象。我只會克隆的,不會銷毀的,我這個還是在後盾網看到的
㈣ php中以雙下劃線打頭的作用是什麼求高手,有木有
這是在某個特定時間執行的方法(函數),比如你說的__autoload是自動載入類的方法,是需要用到某個類的時候就載入,還有比如__construct是對象在實例化的瞬間調用的方法。還有很多__isset __destruct等等。有兩個下劃線的都是在每個特定時候執行。
㈤ PHP中對象的實例什麼時候消失回收
php作為腳本語言是頁面結束即釋放變數所佔內存的.
當一個 PHP線程結束時,當前佔用的所有內存空間都會被銷毀,當前程序中所有對象同時被銷毀。
GC進程一般都跟著每起一個SESSION而開始運行的.gc目的是為了在session文件過期以後自動銷毀刪除這些文件.
在PHP中,沒有任何變數指向這個對象時,這個對象就成為垃圾。PHP會將其在內存中銷毀;這是PHP 的GC垃圾處理機制,防止內存溢出。類似與C++中的智能指針一樣。
執行這些函數也可以起到回收作用 __destruct /unset/mysql_close /fclose
php對session有明確的gc處理時間設定 session.gc_maxlifetime 如果說有垃圾,那就是整體的程序在框架使用中,會多次調用同一文件等等造成的非單件模式等。
析構函數:當某個對象成為垃圾或者當對象被顯式銷毀時執行。
㈥ php如何釋放一個class對象
1 unset($mydb) 或直接賦值為空,
2 不用__destruct(), php會自動回收
php是解釋性語言, 一般所定義的數據不太影響性能的不能人工去注銷,
一個腳本運行完, php會自己釋放, 這是php的優點
官方見意最好也不要用unset(), 因為調用函數會浪費資料, 可直接, $var = '';
㈦ php實例化類後在什麼情況下內存會釋放
這種時候你就應該考慮你處理數據的演算法和機制了, 你說實例化會佔用內存, 那你是不是在這個大數據里經常實例化對象呢, 既然是大數據, 你還在裡面一直實例化,好像就不太合適了。 另外, unset銷毀的只是該對象, 並沒有銷毀該對象在內存中的佔用, 這里引用一句話:
當給一個變數賦值(或者相類似的操作),內存會開辟一個空間存儲,這時候會產生兩個重要的概念,一個是「內存的地址
㈧ 關於php析構函數__destruct()的問題。
析構函數是在對象銷毀時調用的代碼。
當這個對象用完之後,會自動執行這個函數中的語句。
把資料庫關閉的代碼放在這里。就是在對象被銷毀的時候順便把資料庫連接關閉了。
㈨ php對象怎樣銷毀啊
unset對的
建議還是不需要這么做,php單線程處理,手工銷毀會為後期維護待來麻煩,導致代碼可讀性下降,當然一個人開發的話倒是無所謂,不過性能方面提示沒具體做過測試,個人感覺幾毫秒的提升意義不大
㈩ PHP對象的操作( 添加、刪除、使用)
php不是一切皆對象,只有類class才是對象,在類中可以添加,
(添加、刪除、使用)的方法,當然你要編寫一切皆對象的php程序也是可以的。看你功力了。