PHP物件導向開發(二)

2021-06-26 18:49:21 字數 2887 閱讀 3186

六、類的繼承

1、繼承,我們可以理解成共享被繼承類的內容。

被繼承的類我們叫做父類(或基類),繼承者叫做子類(或派生類)。比如:汽車是乙個比較大的類,我們也可以稱之為基類。除此之外,汽車還分為卡車、轎車、東風、寶馬等,因為這些子類具有很多相同的屬性和方法,可以採用繼承汽車類來共享這些屬性與方法,實現**的復用。

當擴充套件乙個類的時候,子類會繼承父類所有的protected與public的屬性與方法,子類也可以覆蓋父類相應的方法。

2、在**中使用關鍵字「extends」來實現類的繼承。

<?php

/* * created on 2014-11-3

* * to change the template for this generated file go to

* window - preferences - phpeclipse - php - code templates

*/header("content-type:text/html;charset=utf-8");

class father

}class son extends father

}$zhang = new son();

echo "我是".$zhang -> name."

"; //繼承父類的屬性

$zhang -> say(); //重寫父類的方法

?>

七、php中的過載

1、傳統開發語言中的重寫和過載:

重寫(覆蓋override)是指:子類重寫了父類的同名方法;  過載(overload)是指:存在多個同名方法,但引數型別/個數不同,傳不同的引數,呼叫不同的方法。

在php中,不允許存在多個同名方法。因此,在php中實現過載的方式和其他語言中不同。

2、php中的過載

php所提供的"過載"(overloading)是指動態地"建立"類屬性和方法。我們是通過魔術方法(magic methods)來實現的。當呼叫當前環境下未定義或不可見的類屬性或方法時,過載方法會被呼叫。

note:__construct(), __destruct(), __call(), __callstatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __tostring(), __invoke(), __set_state(), __clone() 和 __debuginfo() 等方法在 php 中被稱為"魔術方法"(magic methods)。在命名自己的類方法時不能使用這些方法名,除非是想使用其魔術功能。

屬性的過載通過__set,__get,__isset,__unset來分別實現對不存在屬性的賦值、讀取、判斷屬性是否設定、銷毀屬性。

方法的過載通過__call來實現,當呼叫不存在的方法的時候,將會轉為引數呼叫__call方法,當呼叫不存在的靜態方法時會使用__callstatic過載。

示例1:

<?php

/* * created on 2014-11-3

* * to change the template for this generated file go to

* window - preferences - phpeclipse - php - code templates

*/header("content-type:text/html;charset=utf-8");

class human

function __get($varname)

function __set($varname, $varvalue)

function __call($name, $args) else

if ($name == "run" && count($args) == 2)

} static function __callstatic($name, $args)

}$zhang = new human();

$zhang->height = "175"; //屬性過載,給未定義變數賦值

echo $zhang->height . "

"; //屬性過載,訪問未定義的變數(注意,這裡輸出的是變數的名字,而不是變數的值。動態建立的東西,一般只是用來臨時儲存資料。我們實際應用中,一般採用示例2的用法,請看下面的示例2)

$zhang->run(); //方法過載,呼叫未定義的方法

$zhang->run("引數1", "引數2");

//human::eat(); //靜態方法過載,暫未驗證

?>

示例2:

<?php

/* * created on 2014-11-3

* * to change the template for this generated file go to

* window - preferences - phpeclipse - php - code templates

*/header("content-type:text/html;charset=utf-8");

class human

function __get($key)

return null;

} function __isset($key)

return false;

} function __unset($key)

}$zhang = new human();

$zhang -> height = "175"; //屬性過載,給未定義變數賦值

echo $zhang -> height."

"; //屬性過載,訪問未定義的變數

?>

php物件導向(二)

轉殖物件 php的物件是引用型別,變數名往往指代的是乙個指標,這點與js很相似,直接將 spot物件賦值給 al物件,這倆個物件指向的記憶體中的同乙個物件,所以改變乙個另外乙個也會受到影響,但是php4中卻不是這樣的。class dog sopt new dog haha al sopt al na...

PHP物件導向(二)

怎麼樣使用物件中的成員 php物件中的成員有兩種一種是成員屬性,一種是成員方法。物件中的成員就要使用乙個特殊的操作符 來完成物件成員的訪問 例如 物件 屬性 p1 name p2 age p3 物件 方法 p1 say p2 run 注釋 從上例中可以看出只要是物件裡面的成員就要使用物件 屬性 物件...

php物件導向二

靜態的成員包括 靜態屬性和靜態方法 用static修飾的屬性和方法都是靜態的 訪問靜態成員,必須使用self關鍵字和 操作符 靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區,該 區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 直到整個程式執行結束。靜態成...