導航:首頁 > 編程語言 > php類析構函數

php類析構函數

發布時間:2022-09-12 01:26:27

php5,聲明構造函數使用什麼關鍵字,析構函數使用什麼關鍵字

PHP還是比較常用的,於是我研究了一下PHP構造函數,在這里拿出來和大家分享一下,希望對大家有用。如果你在一個類中聲明一個函數,命名為__construct,這個函數將被當成是一個構造函數並在建立一個對象實例時被執行.清楚地說,__是兩個下劃線.就像其它任何函數一樣,構造函數可能有參數或者默認值.你可以定義一個類來建立一個對象並將其屬性全放在一個語句(statement)中.
你也可以定義一個名為__destruct的函數,PHP將在對象被銷毀前調用這個函數.它稱為析構函數.繼承是類的一個強大功能.一個類(子類/派生類)可以繼承另一類(父類/基類)的功能.派生類將包含有基類的所有屬性和方法,並可以在派生類中加上其他屬性和方法.你也可以覆寫基類的方法和屬性.就像3.1.2中顯示的,你可以用extends關鍵字來繼承一個類.
你可能想知道構造函數是如何被繼承的.當它們和其它方法一起被繼承時,他們不會在創建對象時被執行.如果你需要這個功能,你需要用第二章提到的::運算符.它允許你指向一塊命名空間.parent指向父類命名空間,你可以用parent::__construct來調用父類的構造函數.

一些面向對象語言在類之後命名構造函數.PHP的前幾個版本也是如此,到現在這種方法仍然有效.也就是:如果你把一個類命名為Animal並且在其中建立一個命名也是Animal的方法,則這個方法就是構造函數.如果一個類的同時擁有__construt構造函數和與類名相同的函數,PHP將把__construct看作構造函數.這使得用以前的PHP版本所寫的類仍然可以使用.但新的腳本(PHP5)應當使用__construct.

PHP的這種新的聲明構造函數的方法可以使構造函數有一個獨一無二的名稱,無論它所在的類的名稱是什麼.這樣你在改變類的名稱時,就不需要改變構造函數的名稱.你可能在PHP中給構造函數一個像其它類方法一樣的訪問方式.訪問方式將會影響從一定范圍內實例化對象的能力.這允許實現一些固定的設計模式,如Singleton模式.析構函數,相反於構造函數.PHP調用它們來將一個對象從內存中銷毀.默認地,PHP僅僅釋放對象屬性所佔用的內存並銷毀對象相關的資源.析構函數允許你在使用一個對象之後執行任意代碼來清除內存.
當PHP決定你的腳本不再與對象相關時,析構函數將被調用.在一個函數的命名空間內,這會發生在函數return的時候.對於全局變數,這發生於腳本結束的時候.如果你想明確地銷毀一個對象,你可以給指向該對象的變數分配任何其它值.通常將變數賦值勤為NULL或者調用unset.
下面的例子中,計算從類中實例化的對象的個數.Counter類從PHP構造函數開始增值,在析構函數減值.一旦你定義了一個類,你可以用new來建立一個這個類的實例.類的定義是設計圖,實例則是放在裝配線上的元件.New需要類的名稱,並返回該類的一個實例.如果PHP構造函數需要參數,你應當在new後輸入參數.
<?phpclassCounter { privatestatic$count=0; function__construct() { self::$count++; } function__destruct() { self::$count--; } functiongetCount() { returnself::$count; } } //建立第一個實例 $c=newCounter();//輸出1 print($c->getCount()."<br>n"); //建立第二個實例 $c2=newCounter(); //輸出2 print($c->getCount()."<br>n"); //銷毀實例 $c2=NULL; //輸出1 print($c->getCount()."<br>n");?>

與構造函數相反,在PHP5中,可以定義一個名為__destruct()的函數,稱之為PHP5析構函數,PHP將在對象在內存中被銷毀前調用析構函數,使對象在徹底消失之前完成一些工作。對象在銷毀一般可以通過賦值為null實現。

❷ 關於php析構函數__destruct()的問題。

析構函數是在對象銷毀時調用的代碼。
當這個對象用完之後,會自動執行這個函數中的語句。
把資料庫關閉的代碼放在這里。就是在對象被銷毀的時候順便把資料庫連接關閉了。

❸ 請問PHP構造函數的含義

php的兩大oop使用型函數:構造函數(__construct)和析構函數(__destruct );

構造函數:當在某一頁面寫了眾多函數,其中就包括構造函數,當你調用其中任一函數時,都將在調用此函數前先調用構造函數,如:你把鏈接資料庫代碼寫到構造函數裡面,然後在使用增刪改查時,就不用再寫連接s資料庫語句了,因為有構造函數在,你就只用寫增刪改查類sql語句就可以了。
析構函數:和構造函數相反,在同一頁面內,有眾多函數,其中有析構函數,當你調用了某一函數之後,會自動執行析構函數,比如說你的增刪改查用完了,是不是要關閉資料庫連接來釋放內存?析構函數就是這樣用的。

❹ php: 到底什麼是析構函數,舉個簡單例子加以說明!什麼時候會用到


構造函數
是一對
析構函數

對象銷毀(或者注銷)的時候執行
比如定義了一個class
a
如果
令$a=NULL;則析構函數執行。

❺ 一個完整的PHP類包含的七種語法說明

這篇文章主要介紹了一個完整的PHP類包含的七種語法說明,這些語法包括屬性、靜態屬性、方法、靜態方法、類常量、構造函數、析構函數,本文一一給代碼示例和詳細註解讓你快速了解類的寫法,需要的朋友可以參考下
類中的七種語法說明
-屬性
-靜態屬性
-方法
-靜態方法
-類常量
-構造函數
-析構函數
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
?php
class
Student
{
//
類里的屬性、方法和函數的訪問許可權有
(函數和方法是同一個概念)
//
private
私有的
protected
受保護的
public
公有的
//
類常量
沒有訪問許可權修飾符
const
STUDENT
=
'Tom';
//
屬性
public
$stu_name;
//
靜態屬性
public
static
$stu_num
=
1;
//
方法
public
function
stuFunction()
{
echo
'non_static_function','br
/';
}
//
靜態方法
public
static
function
static_stuFunction()
{
echo
'static_function','br
/';
}
//
構造函數
創建對象時自動調用
public
function
__construct($stu_name)
{
$this-stu_name
=
$stu_name;
echo
'__construct','br
/';
}
//
析構函數
銷毀對象時自動調用
public
function
__destruct()
{
echo
'__destruct','br
/';
}
}
//
實例化類對象
$object
=
new
Student('Tom');
//
對象調用屬性
echo
$object-stu_name,'br
/';
//
對象調用靜態屬性
echo
$object::$stu_num,'br
/';
//
類調用靜態屬性
echo
Student::$stu_num,'br
/';
//
使用對象分別調用方法和靜態方法
$object-stuFunction();
$object-static_stuFunction();
$object::stuFunction();
$object::static_stuFunction();
//
使用類分別調用方法和靜態方法
Student::stuFunction();
Student::static_stuFunction();
//
類調用類常量
echo
Student::STUDENT,'br
/';
總結:
對象可以調用方法和靜態方法,類可以調用方法和靜態方法。

❻ PHP中的__destruct()析構函數是一個空方法,還是會執行什麼功能

同其他語言中的析構函數功能差不多,PHP中析構函數也是執行一些清理工作(如果非要加入其它的一些事情,那就另說了),其實PHP在腳本執行結束後就會銷毀一切能夠銷毀的東西,不會浪費一丁點資源,沒有析構的話也沒什麼關系了。但是,在腳本執行中,我們也會執行一些命令,讓某些對象生命結束,如果沒有析構,就只能由垃圾收集機制來運行了,這就浪費了一些資源。由此,顯式析構的作用就出來了。

❼ PHP類的構造方法

構造方法是類中的一個特殊方法。當使用 new 操作符創建一個類的實例時,構造方法將會自動調用,其名稱必須是 __construct() 。所以通常用它執行一些有用的初始化任務。該方法無返回值。
如果子類中定義了構造函數則不會暗中調用其父類的構造函數。要執行父類的構造函數,需要在子類的構造函數中調用 parent::__construct()。

與構造方法對應的就是析構方法,析構方法會在某個對象的所有引用都被刪除或者當對象被顯式銷毀之前執行的一些操作或者功能。析構函數不能帶有任何參數,其名稱必須是 __destruct() 。
同樣,如果子類中定義了析構函數則不會暗中調用其父類的析構函數。要執行父類的析構函數,需要在子類的析構函數中調用 parent::__destruct()。

注意:在析構函數中拋出一個異常會導致致命錯誤。
<?php

class Construct{
protected $a;
protected $b;
function __construct($a,$b){ //定義構造函數
$this->a=$a;
$this->b=$b;
}
function __destruct(){ //重新定義為初始值
$result=0;
echo '恢復乘積的初始值:'.$result;
}
}

class son extends construct{
private $c;
function __construct($c){
parent::__construct(6,10); //調用父類的構造方法,使用方法:parent::__construct(); 有參數加參數
$this->c=$c;
}
function show(){
$result=$this->a*$this->b*$this->c;
print 'abc的乘積是:'.$result.' ';
}
function __destruct(){
parent::__destruct(); //調用父類的析構函數,使用方式:parent::__destruct();
}
}

$test=new son(12); //實例化對象
$test->show(); //abc的乘積是:720 恢復乘積的初始值:0

?>

❽ php 析構函數和session的毛病

php官網對構析函數的解釋:

PHP 5 引入了析構函數的概念,這類似於其它面向對象的語言,如 C++。析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。


這里舉個例子

classobj{
publicfunction__destruct(){
echo'析構函數現在執行了';
}
}
$p=newobj();
$p=NULL;

則在屏幕上列印一句話


你看看是不是由外部調用的__destruct的方法?如果是,則改為public方法


再則看看該對象是否確實被銷毀empty($obj)


我們不能判斷腳本結束後,對象是否被銷毀,則我們手動摧毀這個對象$obj = null;

❾ php5的構造函數和析構函數有哪些

構造函數:void __construct ([ mixed $args [, $... ]] )
PHP5允許開發人員為類定義構造函數。包含構造函數的類在創建實例時將自動調用其構造函數,所以構造函數適合完成初始化對象的操作。
注意:如果子類定義了構造函數,那麼父類的構造函數將不會被自動的隱式的調用。如果需要運行父類的構造函數,需要執行parent::__construct()。如果子類沒有顯式的定義構造函數,那麼子類將繼承父類的構造函數,並直接運行。 析構函數:
PHP5引入了析構函數的概念,類似於C++等面向對象語言中的析構函數的概念。析構函數在類實例的引用失效時、對象被銷毀、超出作用域、以及任意關閉序列時,將被調用。 注意:類似構造函數,當子類定義了自己的析構函數,需要使用parent::__destruct()來調用父類的析構函數。

閱讀全文

與php類析構函數相關的資料

熱點內容
路由器搭橋遠端伺服器地址是什麼 瀏覽:515
編譯動態庫時會連接依賴庫嗎 瀏覽:706
淘寶手機加密是隨機的嗎 瀏覽:672
解壓包子怎麼裝飾 瀏覽:585
四個數湊24演算法 瀏覽:676
哪一種不是vi編譯器的模式 瀏覽:168
xp在此處打開命令窗口 瀏覽:128
代碼編譯運行用什麼軟體 瀏覽:997
動態庫在程序編譯時會被連接到 瀏覽:760
python超簡單編程 瀏覽:259
獲取命令方 瀏覽:976
怎樣製作文件夾和圖片 瀏覽:60
調研編譯寫信息 瀏覽:861
python馮諾依曼 瀏覽:419
同時安裝多個app有什麼影響 瀏覽:254
奧術殺戮命令宏 瀏覽:184
用sdes加密明文字母e 瀏覽:361
單片機原理及應用試題 瀏覽:425
易語言開啟指定文件夾 瀏覽:40
馬思純參加密室大逃脫 瀏覽:322