PHPOOP面向?qū)ο蟮奶匦?/h1>

一. OOP 的封裝

成都創(chuàng)新互聯(lián)公司專注于平南網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供平南營銷型網(wǎng)站建設(shè),平南網(wǎng)站制作、平南網(wǎng)頁設(shè)計、平南網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造平南網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供平南網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

隱藏對象的字段和實現(xiàn)細節(jié),僅對外公開接口,控制在程序中字段的讀和修改的訪問級

別;將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成 一個有機的整體,也就是將數(shù)據(jù)與

操作數(shù)據(jù)的源代碼進行有機的結(jié)合,形成“類”,其中數(shù)據(jù)和函數(shù)都是類的成員。

字段的作用域

1.public 公共的 (類外可以訪問)

2.private 私有的 (類內(nèi)可以訪問)

3.protected 受保護的 (類內(nèi)和子類可以訪問,類外不可訪問)

創(chuàng)建使用了私有的字段,這樣外部就無法訪問了

class Computer {

//類的字段(成員)

private $_name = '聯(lián)想120';

private $_model = 'LX';

}

通過一個公共方法作為入口,訪問私有字段,而必須使用$this關(guān)鍵字。

class Computer {

//類的字段(成員)

private $_name = '聯(lián)想120';

private $_model = 'LX';

//通過公共方法來訪問私有字段

function run () {

echo $this->_name;

}

}

$computer->run();

屬性操作(私有字段的賦值與取值)

可以設(shè)計兩個公共方法,一個方法為setName(),用于賦值;一個方法為getName(),

用于取值。

class Computer {

//類的字段(成員)

private $_name;

private $_model;

//賦值

function setName($_name) {

$this->_name = $_name;

}

//取值

function getName() {

return $this->_name;

}

}

$computer = new Computer();

$computer->setName('IBM');

echo $computer->getName();

如果有十個字段那么就必須要二十個方法才能夠賦值和取值,那么有沒有更簡便的方法

呢?PHP內(nèi)置兩個方法(攔截器)專門用于取值與賦值:__set(),__get()。

class Computer {

//類的字段(成員)

private $_name;

private $_model;

//所有字段的賦值都在這里進行

function __set($_key,$_value) {

$this->$_key = $_value;

}

//所有字段的取值都在這里進行

function __get($_key) {

return $this->$_key;

}

}

$computer = new Computer();

$computer->_model = 'LX';

echo $computer->_model;

方法私有:有些使用類里面的方法并不需要對外公開,只是里面運作的一部分,這個時

候可以將方法也封裝起來。

class Computer {

//類的字段(成員)

private $_name;

private $_model;

//私有方法

private function getEcho() {

echo '我是私有化的方法';

}

//公共方法一般是對外的入口

public function run() {

$this->getEcho();

}

}

$computer = new Computer();

$computer->run();

建議:方法前面如果沒有修飾符,那么就是外部可訪問的公共方法,但為了讓程序更加

的清晰,建議在前面加上public。

常量( constant )

在類中可以定義常量,用來表示不會改變的值。對于從該類實例化的任何對象來說,常

量值在這些對象的整個生命周期中都保持不變。

class Computer {

const PI = 3.1415926;

}

echo Computer::PI;

靜態(tài)類成員

有時候,可能需要創(chuàng)建供所有類實例共享的字段和方法,這些字段和方法與所有的類實

例有關(guān),但不能由任何特定對象調(diào)用。

class Computer {

public static $_count = 0;

}

echo Computer::$_count;

一般來說,必須將字段做成私有化。所以可能需要這么做:

class Computer {

private static $_count = 0;

public static function setRun() {

self::$_count++;

}

public static function getRun() {

return self::$_count;

}

}

Computer::setRun();

echo Computer::getRun();

Instanceof 關(guān)鍵字

PHP5有一個instanceof關(guān)鍵字,使用這個關(guān)鍵字可以確定一個對象是類的實例、類的

子類,還是實現(xiàn)了某個特定接口,并進行相應(yīng)的操作。

class Computer {

//

}

$computer = new Computer();

echo ($computer instanceof Computer);

二. OOP 繼承

繼承是從一個基類得到一個或多個類的機制。

繼承自另一個類的類被稱為該類的子類。這種關(guān)系通常用父類和孩子來比喻。子類將繼

承父類的特性。這些特性由屬性和方法組成。子類可以增加父類之外的新功能,因此子類也

被稱為父類的“擴展”。

在PHP中,類繼承通過extends關(guān)鍵字實現(xiàn)。繼承自其他類的類成為子類或派生類,子

類所繼承的類成為父類或基類。(PHP只支持單繼承,PHP不支持方法重載)。

class Computer {

private $_name = '聯(lián)想120';

private function __get($_key) {

return $this->$_key;

}

public function run() {

echo '我是父類';

}

}

class NoteBookComputer extends Computer {

}

$notebookcomputer = new NoteBookComputer();

$notebookcomputer->run();

echo $notebookcomputer->_name;

字段和方法的重寫(覆蓋)

有些時候,并不是特別需要父類的字段和方法,那么可以通過子類的重寫來修改父類的

字段和方法。

class Computer {

public $_name = '聯(lián)想120';

protected function run() {

echo '我是父類';

}

}

class NoteBookComputer extends Computer {

public $_name = 'IBM';

public function run() {

echo '我是子類';

}

}

子類調(diào)用父類的字段或方法

為了安全,我們一般將父類的方法封裝了起來,這樣,外部就無法調(diào)用,只能被繼承它

的子類所看到。這個時候,就需要通過子類操作來調(diào)用父類了。

class Computer {

protected $_name = '聯(lián)想120';

protected function run() {

echo '我是父類';

}

}

class NoteBookComputer extends Computer {

public function getName() {

echo $this->_name;

}

public function getRun() {

echo $this->run();

}

}

通過重寫調(diào)用父類的方法

有的時候,我們需要通過重寫的方法里能夠調(diào)用父類的方法內(nèi)容,這個時候就必須使用

語法:父類名::方法() 或者parent::方法()即可調(diào)用。

class Computer {

protected function run() {

echo '我是父類';

}

}

class NoteBookComputer extends Computer {

public function run() {

echo Computer::run(); //

}

}

final關(guān)鍵字可以防止類被繼承,有些時候只想做個獨立的類,不想被其他類繼承使用 ,

那么就必須使用這個關(guān)鍵字。建議只要是單獨的類,都加上這個關(guān)鍵字。

final class Computer {

//無法繼承的類

final public function run() {} //無法被繼承的方法

}

class NoteBookComputer extends Computer {

//會報錯

}

抽象類和方法(abstract)

抽象方法很特殊,只在父類中聲明,但在子類中實現(xiàn)。只有聲明為abstract的類可以聲

明抽象方法。

規(guī)則:

1.抽象類不能被實例化,只能被繼承。

2.抽象方法必須被子類方法重寫。

abstract class Computer {

abstract function run();

}

final class NotebookComputer extends Computer {

public function run() {

echo '我實現(xiàn)了';

}

}

接口(interface)

接口定義了實現(xiàn)某種服務(wù)的一般規(guī)范,聲明了所需的函數(shù)和常量,但不指定如何實現(xiàn) 。

之所以不給出實現(xiàn)的細節(jié),是因為不同的實體可能需要用不同的方式來實現(xiàn)公共的方法定

義。關(guān)鍵是要建立必須實現(xiàn)的一組一般原則,只要滿足了這些原則才能說實現(xiàn)了這個接口。

規(guī)則:

1.類全部為抽象方法(不需要聲明abstract)

2.接口抽象方法必須是public

3.成員(字段)必須是常量

interface Computer {

const NAME = '聯(lián)想120';

public function run();

}

final class NotebookComputer implements Computer {

public function run() {

echo '實現(xiàn)了接口的方法';

}

}

$notebookcomputer = new NoteBookComputer();

$notebookcomputer->run();

echo Computer::NAME;

子類可以實現(xiàn)多個接口

interface Computer {

const NAME = '聯(lián)想120';

public function run();

}

interface Notebook {

public function book();

}

final class NotebookComputer implements Computer,Notebook {

public function run() {

echo '實現(xiàn)了接口的方法';

}

public function book() {

echo '實現(xiàn)了接口的方法';

}

}

三. 多態(tài)

多態(tài)是指 OOP 能夠根據(jù)使用類的上下文來重新定義或改變類的性質(zhì)或行為,或者說接

口的多種不同的實現(xiàn)方式即為多態(tài)。把不同的子類對象都當作父類來看,可以屏蔽不同子類

對象之間的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。

interface Computer {

public function version();

public function work();

}

class NotebookComputer implements Computer {

public function version() {

echo '聯(lián)想120';

}

public function work() {

echo '筆記本正在隨時攜帶運行!';

}

}

class desktopComputer implements Computer {

public function version() {

echo 'IBM';

}

public function work() {

echo '臺式電腦正在工作站運行!';

}

}

class Person {

public function run($type) {

$type->version();

$type->work();

}

}

$person = new Person();

$desktopcomputer = new desktopComputer();

$notebookcomputer = new NoteBookComputer();

$person->run($notebookcomputer);

文章名稱:PHPOOP面向?qū)ο蟮奶匦?/a>
文章位置:
http://bm7419.com/article4/jdjsoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站營銷、品牌網(wǎng)站制作、移動網(wǎng)站建設(shè)、微信公眾號營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司