摘要:一面向?qū)ο缶幊袒A(chǔ)實(shí)踐通過對(duì)象的編程方式,可將實(shí)現(xiàn)生活中的一切事物以對(duì)象的形式表現(xiàn)出來。此時(shí)程序也將會(huì)報(bào)致命錯(cuò)誤。屬性不可訪問或未定義,值判斷對(duì)象中的屬性不存在時(shí),自動(dòng)執(zhí)行該函數(shù)。屬性值未定義釋放對(duì)象中的不存在的屬性值時(shí),自動(dòng)執(zhí)行該函數(shù)。
一、PHP面向?qū)ο缶幊袒A(chǔ)實(shí)踐
name = $name; $this->sex = $sex; $this->age = $age; } public function say() { echo "大家好,我的名字叫".$this->name.",今年".$this->age."歲,我的性別是".$this->sex; } public function __destruct() { $this->name = null; $this->sex = null; $this->age = null; } } //實(shí)例化“人”類 $male = new Human("張三","男","20"); //調(diào)用“人”類說話的方法 $male->say(); //輸出結(jié)果:大家好,我的名字叫張三,今年20歲,我的性別是男 ?>
二、PHP面向?qū)ο蟾呒?jí)編程實(shí)踐
知識(shí)點(diǎn):類的繼承、方法重寫、訪問控制、static關(guān)鍵字、final關(guān)鍵字、數(shù)據(jù)訪問、接口、多態(tài)、抽象類
2.1、類的繼承:extends 關(guān)鍵字
例如:一員運(yùn)行員、一位主持人,他們有人類共同的行為方法,但他們都有自己不同的特長(zhǎng)專業(yè)。因此在編程時(shí)需要給他們創(chuàng)建一個(gè)父類并繼承;
name." "; } public function eat() { echo "父類吃飯的方法 "; } } /* * 創(chuàng)建一個(gè)“運(yùn)動(dòng)員”類,繼承“人”類 * extends : 關(guān)鍵字,繼承某個(gè)類 */ class Sport extends Human { public $type; public function __construct($name,$type) { $this->name = $name; //給父類 $name 屬性賦值 $this->type = $type; } public function run() { $this->say(); //調(diào)用父類“說話”的方法 echo "我在正跑步,我是一員".$this->type."運(yùn)動(dòng)員..... "; } } /* * 創(chuàng)建一個(gè)“主持人”類,繼承“人”類 * extends : 關(guān)鍵字,繼承某個(gè)類 */ class Host extends Human { public $television; public function __construct($name,$television) { $this->name = $name; $this->television= $television; } public function perform() { $this->eat(); //調(diào)用父類“吃飯”的方法 echo "我在正表演一個(gè)節(jié)目,我是".$this->television."電視臺(tái)的一名主持人..... "; } } //實(shí)例化“運(yùn)動(dòng)員”類 $nba = new Sport("喬丹","籃球"); $nba->run(); //實(shí)例化“主持人”類 $tv = new Host("張三","北京衛(wèi)視"); $tv->perform(); //輸出結(jié)果: //父類說話的方法,姓名:?jiǎn)痰?我在正跑步,我是一員籃球運(yùn)動(dòng)員..... //父類吃飯的方法 我在正表演一個(gè)節(jié)目,我是北京衛(wèi)視電視臺(tái)的一名主持人..... ?>
2.2、方法重寫:子類重寫父類的方法
say(); //輸出結(jié)果:子類說話的方法 ?>
2.3、訪問控制:public 、 protected 、private 關(guān)鍵字
public:定義公共的成員屬性或方法,任何地方都可使用
protected : 定義受保護(hù)的成員屬性或方法,只允許類本身或子類使用
private : 定義私有的成員屬性或方法,只允許類的本身使用
name = "張三"; echo $worker->name; ?>
2.4、static(靜態(tài))關(guān)鍵字
1)、靜態(tài)屬性用于保存類的公有數(shù)據(jù);
2)、靜態(tài)方法里面只能訪問靜態(tài)屬性或方法,不能使用 $this 偽變量;
3)、靜態(tài)成員不需要通過 new 關(guān)鍵字來實(shí)例化對(duì)象就可訪問使用;
2.5、final關(guān)鍵字:不允許成員方法被重寫,不允許被繼承
例:1、對(duì)于父類“吃飯”這個(gè)方法,不希望子類重寫它;2、對(duì)于“運(yùn)動(dòng)員”這個(gè)類,不希望它再創(chuàng)建子類;
eat(); //實(shí)例化 Student 類 ,給 name 屬性負(fù)值 $obj = new Student(); $obj->name = "張三"; //輸出結(jié)果:Fatal error: Cannot override final method Human::eat() in ******.php on line 15 //Fatal error: Class Student may not inherit from final class (Sport) in ****.php on line 20 ?>
2.6、數(shù)據(jù)訪問:$this 、 self 、parent 關(guān)鍵字
$this : 偽變量,代表類的本身,可訪問本類及父類中的成員屬性與方法。
self : 訪問類中的靜態(tài)成員屬性或方法
parent :訪問父類的成員屬性或方法
get(); //輸出結(jié)果:張三 ?>
2.7、接口:把不同類的共同行為方法進(jìn)行定義,但不具體實(shí)現(xiàn),由子類來實(shí)現(xiàn)具體的方法;
例如:人會(huì)吃飯,動(dòng)物也會(huì)吃飯,甚至有些植物也會(huì)吃飯,但他們吃飯的方式不一樣,因此這時(shí)需要定義一個(gè)接口類,具體的方式由子類來實(shí)現(xiàn);
定義接口關(guān)鍵字:interface
實(shí)現(xiàn)接口方法關(guān)鍵字:implements
eat("rice"); //實(shí)例化一個(gè)“動(dòng)物”類 $monkey = new Animal(); $monkey->eat("banana"); //輸出結(jié)果:I"m eating rice // It"s eating banana ?>
2.8、多態(tài):比如接口A有兩個(gè)實(shí)現(xiàn)B和C,B和C對(duì)A接口里面定義的方法實(shí)現(xiàn)可以是不同的,這種現(xiàn)象稱之為多態(tài);
上述實(shí)例中,ICanEat接口定義了一個(gè)eat()方法,人類吃米飯,猴子吃香蕉。他們都實(shí)現(xiàn)了一個(gè)“吃”的方法,但他們吃東西有不同的行為,稱之為多態(tài);
2.9、抽象類:介入接口與類的定義之間,允許類里面一部分方法不實(shí)現(xiàn),實(shí)現(xiàn)一部分有相同功能且不會(huì)更改的方法。然而接口類里面不允許有任何實(shí)現(xiàn)的方法。
例如:人和動(dòng)物都具有吃飯與呼吸的方法,除吃飯不同以外,呼吸方法是相同的,此時(shí)需要定義一個(gè)抽象類來實(shí)現(xiàn)。
定義抽象類關(guān)鍵字:abstract
breath(); } } //實(shí)例化“人”類 $people = new Human(); $people->eat("rice"); //輸出結(jié)果:I"m eating rice Breath use the air... ?>
三、PHP面向?qū)ο缶幊烫厥鈱?shí)踐
PHP語(yǔ)言特定的一些魔術(shù)方法:
runTest(); //當(dāng)調(diào)用對(duì)象中不存在的方法時(shí),執(zhí)行__call()方法 $obj::runTest(); //當(dāng)調(diào)用對(duì)象中不存在的靜態(tài)方法時(shí),執(zhí)行__callStatic()方法 $obj->name; //當(dāng)調(diào)用對(duì)象中不存在的成員屬性時(shí),執(zhí)行__get()方法 $obj->name = "張三"; //當(dāng)給對(duì)象中不存在的成員屬性賦值時(shí),執(zhí)行__set()方法 isset($obj->name) ? 1 : 0; //判斷對(duì)象中不存在的成員屬性時(shí),執(zhí)行__isset()方法 unset($obj->name); //釋放對(duì)象中的不存在的屬性值時(shí),執(zhí)行__unset()方法 $obj2 = clone $obj; //當(dāng)對(duì)象被克隆時(shí),執(zhí)行__clone()方法 //對(duì)象執(zhí)行完畢,執(zhí)行__destruct()方法 ?>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28552.html
摘要:會(huì)造成內(nèi)存浪費(fèi)的問題構(gòu)造函數(shù)繼承聲明父類聲明子類生成實(shí)例組合式繼承組合式繼承是汲取了兩者的優(yōu)點(diǎn),既避免了內(nèi)存浪費(fèi),又使得每個(gè)實(shí)例化的子類互不影響。 寫在前面 既然是淺談,就不會(huì)從原理上深度分析,只是幫助我們更好地理解... 面向?qū)ο笈c面向過程 面向?qū)ο蠛兔嫦蜻^程是兩種不同的編程思想,剛開始接觸編程的時(shí)候,我們大都是從面向過程起步的,畢竟像我一樣,大家接觸的第一門計(jì)算機(jī)語(yǔ)言大概率都是C語(yǔ)...
摘要:面向?qū)ο竺嫦驅(qū)ο缶幊痰娜Q是,簡(jiǎn)稱,面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。面向?qū)ο缶幊痰娜齻€(gè)主要特征是封裝繼承多態(tài)。 面向?qū)ο?面向?qū)ο缶幊痰娜Q是Object Oriented Programming,簡(jiǎn)稱OOP,面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑?duì)象相互協(xié)作的軟件設(shè)計(jì),面向?qū)ο蟪绦蛟O(shè)計(jì)的目的是在編程中促...
摘要:中的和是一門很靈活的語(yǔ)言,尤其是。即然是面向?qū)ο蟮木幊陶Z(yǔ)言,那也是不可或缺的。在中,永遠(yuǎn)指向的是他的調(diào)用者。定義是存在于實(shí)例化后對(duì)象的一個(gè)屬性,并且指向原對(duì)象的屬性。我們?cè)跀U(kuò)展的時(shí)候,同時(shí)父類也會(huì)有對(duì)應(yīng)的方法,這很顯然是一個(gè)很嚴(yán)重的問題。 javascript中的this和new javascript是一門很靈活的語(yǔ)言,尤其是function。他即可以以面向過程的方式來用,比如: f...
摘要:我們今天也來做一個(gè)萬(wàn)能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...
摘要:我們今天也來做一個(gè)萬(wàn)能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...
閱讀 2027·2023-04-26 01:33
閱讀 1659·2023-04-26 00:52
閱讀 1035·2021-11-18 13:14
閱讀 5393·2021-09-26 10:18
閱讀 2901·2021-09-22 15:52
閱讀 1488·2019-08-29 17:15
閱讀 3016·2019-08-29 16:11
閱讀 1038·2019-08-29 16:11