當前位置:首頁 » 編程語言 » php繼承類構造函數

php繼承類構造函數

發布時間: 2025-09-07 05:57:07

php中owner什麼意思

請看PHP手冊18章,裡面的內容你看了就明白。

第18章類與對象(PHP4)
目錄

繼承
構造函數
范圍解析操作符(::)
parent
序列化對象-會話中的對象
魔術函數__sleep和__wakeup
構造函數中的引用
對象的比較



類是變數與作用於這些變數的函數的集合。使用下面的語法定義一個類:

<?php
classCart{
var$items;//購物車中的物品

//將$num個$artnr物品加入購物車

functionadd_item($artnr,$num){
$this->items[$artnr]+=$num;
}

//將$num個$artnr物品從購物車中取出

functionremove_item($artnr,$num){
if($this->items[$artnr]>$num){
$this->items[$artnr]-=$num;
returntrue;
}elseif($this->items[$artnr]==$num){
unset($this->items[$artnr]);
returntrue;
}else{
returnfalse;
}
}
}
?>

上面的例子定義了一個Cart類,這個類由購物車中的商品構成的數組和兩個用於從購物車中添加和刪除商品的函數組成。

警告
不能將一個類的定義分割到多個文件中。也不能將一個類的定義分割到多個PHP塊中,除非該分割是在一個方法聲明內部。以下用法將不起作用:

<?php
classtest{
?>
<?php
functiontest(){
print'OK';
}
}
?>

但是以下用法是可以的:

<?php
classtest{
functiontest(){
?>
<?php
print'OK';
}
}
?>

以下警告僅用於PHP4。

小心
名稱stdClass已經被Zend使用並保留。不能在PHP代碼中定義名為stdClass的類。

小心
函數名__sleep和__wakeup在PHP類中是魔術函數。除非想要與之聯系的魔術功能,否則在任何類中都不能以此命名函數。

小心
PHP將所有以__開頭的函數名保留為魔術函數。除非想要使用一些見於文檔中的魔術功能,否則建議不要在PHP中將函數名以__開頭。

在PHP4中,var變數的值只能初始化為常量。用非常量值初始化變數,需要一個初始化函數,該函數在對象被創建時自動被調用。這樣一個函數被稱之為構造函數(見下面)。

<?php
/*PHP4中不能這樣用*/
classCart{
var$todays_date=date("Y-m-d");
var$name=$firstname;
var$owner='Fred'.'Jones';
/*不過包含有常量的數組可以*/
var$items=array("VCR","TV");
}

/*應該這樣進行*/
classCart{
var$todays_date;
var$name;
var$owner;
var$items=array("VCR","TV");
functionCart(){
$this->todays_date=date("Y-m-d");
$this->name=$GLOBALS['firstname'];
/*etc...*/
}
}
?>
類也是一種類型,就是說,它們是實際變數的藍圖。必須用new運算符來創建相應類型的變數。

<?php
$cart=newCart;
$cart->add_item("10",1);

$another_cart=newCart;
$another_cart->add_item("0815",3);
?>
上述代碼創建了兩個Cart類的對象$cart和$another_cart,對象$cart的方法add_item()被調用時,添加了1件10號商品。對於對象$another_cart,3件0815號商品被添加到購物車中。

$cart和$another_cart都有方法add_item(),remove_item()和一個items變數。它們都是明顯的函數和變數。可以把它們當作文件系統中的某些類似目錄的東西來考慮。在文件系統中,可以擁有兩個不同的README.TXT文件,只要不在相同的目錄中。正如從為了根目錄訪問每個文件需要輸入該文件的完整的路徑名一樣,必須指定需要調用的函數的完整名稱:在PHP術語中,根目錄將是全局名字空間,路徑名符號將是->。因而,名稱$cart->items和$another_cart->items命名了兩個不同的變數。注意變數名為$cart->items,不是$cart->$items,那是因為在PHP中一個變數名只有一個單獨的美元符號。

<?php
//正確,只有一個$
$cart->items=array("10"=>1);

//不正確,因為$cart->$items變成了$cart->""
$cart->$items=array("10"=>1);

//正確,但可能不是想要的結果:
//$cart->$myvar變成了$cart->items
$myvar='items';
$cart->$myvar=array("10"=>1);
?>
在定義類的時候,無法得知將使什麼名字的對象來訪問:在編寫Cart類時,並不知道之後對象的名稱將會命名為$cart或者$another_cart。因而你不能在類中使用$cart->items。然而為了類定義的內部訪問自身的函數和變數,可以使用偽變數$this來達到這個目的。$this變數可以理解為「我自己的」或者「當前對象」。因而'$this->items[$artnr]+=$num'可以理解為「我自己的物品數組的$artnr計數器加$num」或者「在當前對象的物品數組的$artnr計數器加$num」。

注意:偽變數$this通常未定義,如果其所在的方法是被靜態調用的話。但這不是個嚴格規定:如果一個方法被從另一個對象內靜態調用的話,則$this會被定義。此時$this的值是那個發出調用的對象。用下例演示:

<?php
classA
{
functionfoo()
{
if(isset($this)){
echo'$thisisdefined(';
echoget_class($this);
echo")\n";
}else{
echo"\$thisisnotdefined.\n";
}
}
}

classB
{
functionbar()
{
A::foo();
}
}

$a=newA();
$a->foo();
A::foo();
$b=newB();
$b->bar();
B::bar();
?>
上例將輸出:

$thisisdefined(a)
$thisisnotdefined.
$thisisdefined(b)
$thisisnotdefined.注意:有一些不錯的函數用來處理類和對象。應該關注一下類/對象函數。

㈡ 在php中,子類extends繼承了父類,當子類和父類同時存在構造函數__construct先執行哪一個呢

1、如果父類和子類中都沒有顯式的定義__construct,在實例化子類對象時,只會隱含的調用子類自己的構造方法。

2、如果父類中有顯式的構造方法__construct,而子類中沒有定義__construct,在實例化子類對象時,就會調用父類中的構造方法。

3、如果父類和子類中都顯式的定義了__construct,在實例化子類對象時,只會調用子類自己的構造方法(這就像是子類重構了父類的構造方法),而如果也想要調用父類的構造方法的話,就需要在子類的__construct 方法中顯式的調用,(如 __construct(){ parent::_construct();})。


(2)php繼承類構造函數擴展閱讀

子類的構造函數名與子類名相同。

在子類里父類的構造函數不會自動執行。

要在子類里執行父類的構造函數,必須執行類似以下語句:

$this->[父類的構造函數名()]

類的構造函數統一命名為__construct()。

子類的構造函數名也是__construct()(也是廢話)。

在子類里父類的構造函數會不會執行,分兩種情況:

1、如子類不定義構造函數 __construct(),則父類的構造函數默認會被繼承下來,且會自動執行。

2、如子類定義了構造函數 __construct(),因為構造函數名也是__construct(),所以子類的構造函數實際上是覆蓋(override)了父類的構造函數。這時執行的是該子類的構造函數。

這時如果要在子類里執行父類的構造函數,必須執行類似以下語句:parent::__construct();

㈢ php 構造函數中的變數不能被其他函數使用嗎

test類用extends繼承了tools類,如果tools類裡面有構造方法的話,test是可以用的。tools的私有成員不能使用,其他都可以。至於構造函數,定義js函數有三種方式,有一種可以叫做構造函數方法定義。至於php中,應該沒這說法,在類外面的function叫函數,在類裡面見方法或構造方法。

熱點內容
packettracer怎麼配置 發布:2025-09-07 09:40:43 瀏覽:524
概念格演算法 發布:2025-09-07 09:33:21 瀏覽:398
空間不支持php 發布:2025-09-07 09:25:22 瀏覽:517
甜蜜的訪問了你的空間 發布:2025-09-07 09:23:04 瀏覽:310
qq個人業務網站源碼 發布:2025-09-07 09:23:01 瀏覽:343
軟考演算法題 發布:2025-09-07 09:11:07 瀏覽:630
android項目總結 發布:2025-09-07 09:08:48 瀏覽:731
除ftp訪問之外還能怎麼訪問 發布:2025-09-07 09:08:48 瀏覽:840
電腦訪問伺服器會出現排隊等待 發布:2025-09-07 08:56:55 瀏覽:628
linux除法 發布:2025-09-07 08:56:13 瀏覽:721