《PHP Web應(yīng)用開(kāi)發(fā)案例教程》630-9(阮云蘭)教案 第15課 高級(jí)特性和接口使用_第1頁(yè)
《PHP Web應(yīng)用開(kāi)發(fā)案例教程》630-9(阮云蘭)教案 第15課 高級(jí)特性和接口使用_第2頁(yè)
《PHP Web應(yīng)用開(kāi)發(fā)案例教程》630-9(阮云蘭)教案 第15課 高級(jí)特性和接口使用_第3頁(yè)
《PHP Web應(yīng)用開(kāi)發(fā)案例教程》630-9(阮云蘭)教案 第15課 高級(jí)特性和接口使用_第4頁(yè)
《PHP Web應(yīng)用開(kāi)發(fā)案例教程》630-9(阮云蘭)教案 第15課 高級(jí)特性和接口使用_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PAGE8PAGE8PAGE9PAGE9

課題高級(jí)特性和接口使用課時(shí)2課時(shí)(90min)教學(xué)目標(biāo)知識(shí)技能目標(biāo):(1)掌握繼承及其相關(guān)知識(shí)的應(yīng)用(2)掌握面向?qū)ο缶幊痰母呒?jí)特性(3)掌握接口的應(yīng)用(4)了解PHP中魔術(shù)方法的應(yīng)用素質(zhì)目標(biāo):(1)培養(yǎng)精益求精、科學(xué)嚴(yán)謹(jǐn)、追求卓越的工匠精神(2)培養(yǎng)學(xué)生的邏輯思維、辯證思維和創(chuàng)新思維能力(3)緊跟時(shí)代發(fā)展,了解前沿科技,樹(shù)立科技報(bào)國(guó)的人生理想教學(xué)重難點(diǎn)教學(xué)重點(diǎn):面向?qū)ο缶幊痰母呒?jí)特性教學(xué)難點(diǎn):PHP中魔術(shù)方法的應(yīng)用教學(xué)方法案例分析法、問(wèn)答法、討論法、講授法、實(shí)踐法教學(xué)用具電腦、投影儀、多媒體課件、教材教學(xué)設(shè)計(jì)第1節(jié)課:→→→傳授新知(38min)第2節(jié)課:→傳授新知(20min)→課堂實(shí)訓(xùn)(15min)→課堂小結(jié)(3min)→作業(yè)布置(2min)教學(xué)過(guò)程主要教學(xué)內(nèi)容及步驟設(shè)計(jì)意圖第一節(jié)課課前任務(wù)【教師】布置課前任務(wù),和學(xué)生負(fù)責(zé)人取得聯(lián)系,讓其提醒同學(xué)通過(guò)文旌課堂APP或其他學(xué)習(xí)軟件,預(yù)習(xí)本節(jié)課要學(xué)習(xí)的知識(shí)【學(xué)生】完成課前任務(wù)通過(guò)課前任務(wù),使學(xué)生預(yù)習(xí)本節(jié)課要學(xué)習(xí)的知識(shí),增加學(xué)生的學(xué)習(xí)興趣考勤(2min)【教師】使用文旌課堂APP進(jìn)行簽到【學(xué)生】班干部報(bào)請(qǐng)假人員及原因培養(yǎng)學(xué)生的組織紀(jì)律性,掌握學(xué)生的出勤情況問(wèn)題導(dǎo)入(5min)【教師】提出以下問(wèn)題:前面的內(nèi)容中,類被當(dāng)作模板,對(duì)象被當(dāng)作活動(dòng)組件,如何對(duì)一些類進(jìn)行重復(fù)的使用?如何不實(shí)例化而直接訪問(wèn)變量和方法呢?通過(guò)問(wèn)題導(dǎo)入,引導(dǎo)學(xué)生主動(dòng)思考,激發(fā)學(xué)生的學(xué)習(xí)興趣傳授新知(38min)【教師】通過(guò)學(xué)生的回答引入要講的知識(shí),講解PHP中的繼承8.2繼承類可以從其他類中擴(kuò)展出來(lái),擴(kuò)展或派生出來(lái)的類擁有其基類(也稱父類)的所有變量和函數(shù),并包含所有派生類(也稱子類)中定義的新功能,這稱為繼承。繼承是面向?qū)ο笞钪匾奶攸c(diǎn)之一,可以實(shí)現(xiàn)對(duì)類的復(fù)用。?【教師】安排學(xué)生掃碼觀看視頻“繼承”,講解知識(shí)?【學(xué)生】掃碼觀看、理解、記憶8.2.1怎樣繼承一個(gè)類PHP是單繼承的,一個(gè)子類只能繼承一個(gè)父類,但一個(gè)父類卻可以派生出多個(gè)子類。子類不能繼承父類的私有屬性和私有方法。在PHP5之后的版本中,類的方法和構(gòu)造函數(shù)均可以被繼承。當(dāng)子類被實(shí)例化時(shí),PHP會(huì)先在子類中查找構(gòu)造方法,如果子類有自己的構(gòu)造方法,PHP會(huì)優(yōu)先調(diào)用子類中的構(gòu)造方法;當(dāng)子類中沒(méi)有時(shí),PHP會(huì)轉(zhuǎn)而去調(diào)用父類中的構(gòu)造方法。繼承使用關(guān)鍵字“extends”來(lái)聲明,聲明繼承的格式如下:classextendTestextendstest{ …}extendTest為子類名稱,test為父類名稱。?【教師】通過(guò)多媒體展示例8-7的代碼和運(yùn)行結(jié)果,并進(jìn)行講解使用繼承類。實(shí)例代碼如下:<?php//父類classsite{private$url; //私有屬性publicfunctionsetUrl($par){return$this->url=$par;}publicfunctiongetUrl(){return$this->url;}}//子類classchild_siteextendssite{publicfunctionoutput(){ //子類新增方法echo"我們網(wǎng)站的URL是:".@$this->url; }}$child_site=newchild_site(); //實(shí)例化子類$child_site->setUrl("/");//直接調(diào)用繼承自父類的方法setUrl()echo$child_site->getUrl()."<br>";//直接調(diào)用繼承自父類的方法getUrl()echo$child_site->output();?>例8-7中,在實(shí)例化子類child_site時(shí),父類site的方法setUrl()和getUrl()被繼承,可以直接調(diào)用父類的方法設(shè)置其屬性$url并取得其值。由于子類不能繼承父類的私有屬性,所以output()方法不能取得父類的$url值,如果將父類的屬性$url聲明為public或protected,則是可以的,讀者可自行嘗試。8.2.2重寫如果從父類繼承的方法不能滿足子類的需求,可以對(duì)其進(jìn)行改寫,該過(guò)程叫作方法的重寫(override),也稱方法的覆蓋。在對(duì)父類的方法進(jìn)行重寫時(shí),子類中的方法必須與父類中對(duì)應(yīng)的方法具有相同的名稱。?【教師】通過(guò)多媒體展示例8-8的代碼和運(yùn)行結(jié)果,并進(jìn)行講解使用重寫。實(shí)例代碼如下:<?php//父類classsite{private$url="/";//私有屬性private$title="金企鵝聯(lián)合出版中心";//私有屬性publicfunctiongetUrl(){return$this->url;}publicfunctiongetTitle(){return$this->title;}}//子類classchild_siteextendssite{private$title="金企鵝文化發(fā)展中心"; //私有屬性publicfunctiongetTitle(){ //重寫getTitle方法return$this->title;}}$site=newsite(); //實(shí)例化父類echo$site->getUrl()."<br>"; //調(diào)用父類的方法getUrl()echo$site->getTitle()."<hr>"; //調(diào)用父類的方法getTitle()$child_site=newchild_site(); //實(shí)例化子類echo$child_site->getUrl()."<br>"; //直接調(diào)用繼承自父類的方法getUrl()echo$child_site->getTitle(); //調(diào)用重寫后的方法getTitle()?>在重寫方法時(shí)需注意以下幾點(diǎn):子類中的覆蓋方法不能使用比父類中被覆蓋方法更嚴(yán)格的訪問(wèn)權(quán)限。在聲明方法時(shí)如果沒(méi)有定義訪問(wèn)權(quán)限,則權(quán)限默認(rèn)為public。子類中的覆蓋方法可以擁有與父類中被覆蓋方法不同的參數(shù)數(shù)量,如例8-8中的覆蓋方法可以寫作:publicfunctiongetTitle($t){ //重寫getTitle方法$this->title=$t;return$this->title;}父類中的構(gòu)造方法也可以重寫。8.2.3“$this->”和“::”的使用子類不僅可以調(diào)用自己的變量和方法,也可以調(diào)用父類的變量和方法。并且對(duì)于其他不相關(guān)的類成員同樣可以調(diào)用。PHP是通過(guò)偽變量“$this->”和作用域操作符“::”來(lái)實(shí)現(xiàn)這些調(diào)用的。前面的學(xué)習(xí)中曾簡(jiǎn)單介紹過(guò)這兩個(gè)字符,本節(jié)將詳細(xì)介紹它們的應(yīng)用。1.$this->在8.1.3節(jié)介紹成員方法時(shí)曾簡(jiǎn)單介紹過(guò)“->”符號(hào)的應(yīng)用,就是用“對(duì)象名->方法名”的格式來(lái)調(diào)用成員方法。但一般在定義類時(shí),是無(wú)法得知對(duì)象的名稱是什么的。這樣如果想調(diào)用本類中的方法,就要使用偽變量$this->。$this就是指本身,所以$this->只能在類的內(nèi)部使用。?【教師】通過(guò)多媒體展示例8-9的代碼和運(yùn)行結(jié)果,并進(jìn)行講解當(dāng)將類實(shí)例化后,$this會(huì)同時(shí)被實(shí)例化為本類的對(duì)象,此時(shí)對(duì)$this使用

get_class()函數(shù)將返回本類的類名。實(shí)例代碼如下:<?phpclasscheckout{ //創(chuàng)建類checkout functiontest(){ //創(chuàng)建成員方法 if(isset($this)){ //判斷變量$this是否存在 echo'$this的值為:'.get_class($this); //如存在,輸出$this所屬類的名稱 }else{ echo'$this未定義'; } }}$class_name=newcheckout(); //實(shí)例化對(duì)象$class_name$class_name->test(); //調(diào)用方法test()?>get_class()函數(shù)返回對(duì)象所屬的類名,如不是對(duì)象,則返回false。2.操作符“::”相對(duì)只能在類內(nèi)部使用的偽變量$this->來(lái)說(shuō),操作符“::”更為強(qiáng)大。它可以在沒(méi)有聲明任何實(shí)例的情況下訪問(wèn)類中的方法或變量。其使用格式如下:關(guān)鍵字::變量名/常量名/方法名此處的關(guān)鍵字分為以下3種情況:parent:用于調(diào)用父類中的成員變量、成員方法和常量。self:用于調(diào)用當(dāng)前類中的靜態(tài)成員和變量。類名:用于調(diào)用本類中的變量、常量和方法。?【教師】通過(guò)多媒體展示例8-10的代碼和運(yùn)行結(jié)果,并進(jìn)行講解本例依次使用了類名、parent關(guān)鍵字和self關(guān)鍵字來(lái)調(diào)用變量和方法。讀者可觀察輸出結(jié)果。實(shí)例代碼如下:<?phpclasssite{ constTitle='北京金企鵝文化發(fā)展中心'; //常量Title function__construct(){ //構(gòu)造方法 echo'本網(wǎng)站的標(biāo)題為:'.site::Title.'<br>'; //輸出默認(rèn)值 }}classchild_siteextendssite{ //site類的子類 constTitle='北京金企鵝聯(lián)合出版中心'; //聲明常量 function__construct(){ //子類的構(gòu)造方法 parent::__construct(); //調(diào)用父類的構(gòu)造方法 echo'本網(wǎng)站的標(biāo)題為:'.self::Title.''; //輸出本類中的默認(rèn)值 }}$obj=newchild_site(); //實(shí)例化對(duì)象?>【教師】講解PHP中的高級(jí)特性8.3高級(jí)特性8.3.1靜態(tài)變量(方法)前面的內(nèi)容中,類被當(dāng)作模板,對(duì)象被當(dāng)作活動(dòng)組件,面向?qū)ο缶幊讨械牟僮鞫际峭ㄟ^(guò)類的實(shí)例(對(duì)象)來(lái)完成的。事實(shí)上,并不是所有的變量(方法)都要通過(guò)創(chuàng)建對(duì)象來(lái)調(diào)用。聲明類屬性或方法為static(靜態(tài)),就可以不實(shí)例化類而直接訪問(wèn)。調(diào)用靜態(tài)成員的格式為關(guān)鍵字::靜態(tài)成員此處的關(guān)鍵字分為以下兩種情況。self:在類內(nèi)部調(diào)用靜態(tài)成員時(shí)使用。靜態(tài)成員所在類名,在類外部調(diào)用類內(nèi)部的靜態(tài)成員時(shí)使用。使用靜態(tài)成員,除了不需要實(shí)例化對(duì)象外還有一個(gè)好處,就是在對(duì)象被銷毀后,依然保存被修改的靜態(tài)數(shù)據(jù),以便下次繼續(xù)使用。?【教師】通過(guò)多媒體展示例8-11的代碼和運(yùn)行結(jié)果,并進(jìn)行講解靜態(tài)成員的使用。實(shí)例代碼如下:<?phpclassNote{ //Note類 static$n=1; //聲明一個(gè)靜態(tài)變量$n,初值為1 publicfunctionshowMe(){ //申明一個(gè)方法 echo'我們一共有'.self::$n.'個(gè)人!'; //輸出靜態(tài)變量 self::$n++; //將靜態(tài)變量加1 }}$notea=newNote(); //實(shí)例化類$notea->showMe(); //調(diào)用showMe()方法echo"<br>";$noteb=newNote(); //實(shí)例化類$noteb->showMe(); //再次調(diào)用showMe()方法echo"<br>";echo'我們一共有'.Note::$n.'個(gè)人!'; //直接使用類名調(diào)用靜態(tài)變量?>在例8-11中,首先定義一個(gè)靜態(tài)變量$n,接著定義一個(gè)方法,在方法內(nèi)部調(diào)用靜態(tài)變量,之后給變量加1。依次實(shí)例化類生成兩個(gè)對(duì)象,并調(diào)用類方法??梢园l(fā)現(xiàn)兩個(gè)對(duì)象中的方法返回的結(jié)果是有聯(lián)系的。最后直接使用類名輸出靜態(tài)變量。靜態(tài)屬性不能通過(guò)一個(gè)類已實(shí)例化的對(duì)象來(lái)訪問(wèn),但靜態(tài)方法可以。靜態(tài)方法不需要通過(guò)對(duì)象即可調(diào)用,所以偽變量$this在靜態(tài)方法中不可用。靜態(tài)屬性不可以由對(duì)象通過(guò)->操作符來(lái)訪問(wèn)。8.3.2final類和方法繼承為類的應(yīng)用帶來(lái)了巨大的靈活性。通過(guò)覆寫類和方法,調(diào)用同樣的成員方法可以得到完全不同的結(jié)果,但有時(shí)候,也需要類或方法保持不變,這時(shí)就要用到final關(guān)鍵字。如果要聲明一個(gè)類為final,可以采取如下格式:finalclassSize{//…}聲明為final的類不能被繼承,也不能有子類。?【教師】通過(guò)多媒體展示例8-12的代碼和運(yùn)行結(jié)果,并進(jìn)行講解final類的應(yīng)用。實(shí)例代碼如下:<?phpfinalclassCount{ //final類Count function__construct(){ //構(gòu)造方法 echo'我是final類'; }}classCount_aextendsCount{ //創(chuàng)建Count的子類Count_a staticfunctionexam(){ //子類中的方法 echo"我是子類中的方法"; }}Count_a::exam(); //調(diào)用子類方法?>例8-12設(shè)置了final類Count,并生成了子類Count_a,可以看出程序報(bào)錯(cuò),無(wú)法執(zhí)行。如果要聲明一個(gè)方法為final,可以采取如下格式:finalfunctionmin()如果父類中的方法被聲明為final,則在子類中無(wú)法覆蓋或重寫該方法。當(dāng)不希望一個(gè)類被繼承時(shí),可以將該類聲明為final;當(dāng)不希望類中的某個(gè)方法被子類重寫時(shí),可以設(shè)置其為final方法。8.3.3常量屬性可以把在類中始終保持不變的值定義為常量。PHP中使用const關(guān)鍵字定義常量,在定義和使用常量時(shí)不需要使用$符號(hào)。此外,使用const定義的常量名稱一般都大寫。類中常量的使用方法類似于靜態(tài)變量,不同的是,它的值不能被改變。調(diào)用常量時(shí)使用以下格式:類名::常量名?【教師】通過(guò)多媒體展示例8-13的代碼和運(yùn)行結(jié)果,并進(jìn)行講解常量屬性。實(shí)例代碼如下:<?phpclassMyClass{ //聲明類constCONSTANT='常量值'; //聲明常量functionshowConstant(){ //成員方法echoself::CONSTANT; //輸出常量值}}echoMyClass::CONSTANT."<br>"; //輸出常量值$class=newMyClass(); //實(shí)例化類$class->showConstant(); //調(diào)用成員方法?>常量的值必須是一個(gè)定值,不能是變量、類屬性、數(shù)學(xué)運(yùn)算的結(jié)果或函數(shù)調(diào)用。同靜態(tài)屬性一樣,只能通過(guò)類本身而不是類的實(shí)例訪問(wèn)常量屬性。當(dāng)需要在類的所有實(shí)例中都能夠訪問(wèn)某屬性,并且屬性值無(wú)須改變時(shí),可以使用常量屬性。8.3.4abstract類和方法使用abstract關(guān)鍵字修飾的類或方法稱為抽象類或抽象方法。抽象類不能被直接實(shí)例化,只能作為其他類的父類來(lái)使用。抽象方法只是聲明了其調(diào)用方式(參數(shù)),不能定義其具體的功能實(shí)現(xiàn)。子類可以繼承它并通過(guò)實(shí)現(xiàn)其中的抽象方法,來(lái)使抽象類具體化。任何一個(gè)類,如果它里面至少有一個(gè)方法是被聲明為抽象的,那么該類就必須被聲明為抽象的。抽象類可以像普通類那樣去聲明,但必須以分號(hào)而不是方法體結(jié)束。抽象方法只有方法的聲明部分,沒(méi)有方法體。繼承一個(gè)抽象類的時(shí)候,父類中的所有抽象方法在子類中必須被重寫;此外,這些方法的訪問(wèn)控制必須和父類中一樣(或者更為寬松)。例如某個(gè)抽象方法被聲明為受保護(hù)的,那么子類中實(shí)現(xiàn)的方法就應(yīng)該聲明為受保護(hù)的或者公有的,而不能定義為私有的。此外方法的調(diào)用方式必須匹配,即類型和所需參數(shù)數(shù)量必須一致。?【教師】通過(guò)多媒體展示例8-14的代碼和運(yùn)行結(jié)果,并進(jìn)行講解抽象類和方法的應(yīng)用。實(shí)例代碼如下:<?phpabstractclassTest{ //定義抽象類abstractprotectedfunctiongetValue(); //定義抽象方法abstractprotectedfunctionprin($p); //定義抽象方法//普通方法(非抽象方法)publicfunctionprintOut(){print$this->getValue();}}classTest1extendsTest{ //定義子類,繼承抽象類protectedfunctiongetValue(){ //重寫抽象方法return"重寫抽象方法1!<br>";}publicfunctionprin($p){ //重寫抽象方法return"{$p}重寫抽象方法2!";}}$class1=newTest1; //實(shí)例化子類$class1->printOut(); //調(diào)用方法echo$class1->prin('FOO_'); //調(diào)用方法?>【學(xué)生】聆聽(tīng)、思考、記錄通過(guò)教師的講解和演示,使學(xué)生了解PHP中的繼承和高級(jí)特性第二節(jié)課問(wèn)題導(dǎo)入(5min)【教師】提出以下問(wèn)題:你知道PHP中的接口是什么嗎?它有什么作用?【學(xué)生】思考、舉手回答通過(guò)問(wèn)題導(dǎo)入,引導(dǎo)學(xué)生主動(dòng)思考,激發(fā)學(xué)生的學(xué)習(xí)興趣傳授新知(20min)【教師】通過(guò)學(xué)生的回答引入新知,介紹PHP中接口的使用,以及魔術(shù)方法8.4接口的使用前面說(shuō)過(guò),PHP只支持單繼承,父類可以派生出多個(gè)子類,但一個(gè)子類只能繼承自一個(gè)父類。但在一些場(chǎng)景中,往往需要用到多繼承,即一個(gè)子類繼承多個(gè)父類的方法,接口有效地解決了這一問(wèn)題。接口是一種類似于類的結(jié)構(gòu),使用它可以指定某個(gè)類必須實(shí)現(xiàn)哪些方法。它只包含方法原型,不需要包含方法體。這些方法原型必須被聲明為public,不可以為private或protected。接口是通過(guò)interface關(guān)鍵字來(lái)聲明的,聲明格式如下:interfaceTest{}與繼承使用extends關(guān)鍵字不同的是,實(shí)現(xiàn)接口需要使用implements操作符。classcheckoutimplementsTest{}實(shí)現(xiàn)接口的類中必須實(shí)現(xiàn)接口中定義的所有方法,除非該類被聲明為抽象類。類可以實(shí)現(xiàn)多個(gè)接口,用逗號(hào)來(lái)分隔多個(gè)接口的名稱。classcheckoutimplementsinterface1,interface2{functioninterface1(){//功能實(shí)現(xiàn)}functioninterface2(){//功能實(shí)現(xiàn)}…}?【教師】通過(guò)多媒體展示例8-15的代碼和運(yùn)行結(jié)果,并進(jìn)行講解接口的使用。實(shí)例代碼如下:<?php interfacePower{ //定義接口 functionrules(); //定義方法 } interfacePermission{ functionright(); } classUserimplementsPermission{ //創(chuàng)建子類User,實(shí)現(xiàn)一個(gè)接口Permission functionright(){ echo'實(shí)現(xiàn)一個(gè)接口'; } } classManagerimplementsPower,Permission{//創(chuàng)建子類Manager,實(shí)現(xiàn)多個(gè)接口 functionrules(){ echo'實(shí)現(xiàn)多個(gè)接口中的第一個(gè)'; } functionright(){ echo'實(shí)現(xiàn)多個(gè)接口中的第二個(gè)'; } } $user=newUser(); //實(shí)例化子類User $manager=newManager(); //實(shí)例化子類Manager $user->right(); //調(diào)用$user對(duì)象的right方法 echo'<p>'; $manager->rules(); //調(diào)用$manager對(duì)象的rules方法 echo'<p>'; $manager->right(); //調(diào)用$manager對(duì)象的right方法?>由以上實(shí)例可以看出,抽象類和接口實(shí)現(xiàn)的功能類似。抽象類可以實(shí)現(xiàn)公共的方法,而接口則可以實(shí)現(xiàn)多繼承??梢愿鶕?jù)具體情況決定何時(shí)使用抽象類和接口。8.5PHP中的魔術(shù)方法在PHP中以兩條下畫(huà)線“__”開(kāi)頭的方法被稱為“魔術(shù)方法”,是系統(tǒng)預(yù)定義的方法。如果需要使用這些魔術(shù)方法,必須先在類中定義。前面學(xué)過(guò)的構(gòu)造方法“__construct()”和析構(gòu)方法“__destruct()”都屬于魔術(shù)方法。魔術(shù)方法的作用、方法名、使用的參數(shù)列表和返回值都是規(guī)定好的,在使用這些方法時(shí),需要用戶自己根據(jù)需求編寫方法體的內(nèi)容。使用時(shí)無(wú)須調(diào)用,它會(huì)在特定情況下自動(dòng)被調(diào)用。PHP將所有以兩條下畫(huà)線開(kāi)頭的類方法保留為魔術(shù)方法。所以在定義類方法時(shí),除魔術(shù)方法外,建議不要以“__”為前綴。8.5.1__set()方法在PHP程序試圖給一個(gè)未定義的屬性賦值時(shí),就會(huì)調(diào)用__set()方法。__set()方法包含兩個(gè)參數(shù),分別表示變量-名稱和變量值,兩個(gè)參數(shù)均不可省略。?【教師】通過(guò)多媒體展示例8-16的代碼和運(yùn)行結(jié)果,并進(jìn)行講解使用__set()方法賦值。實(shí)例代碼如下:<?phpclassTest{ //定義類Testpublicfunction__set($name,$value){ //聲明魔術(shù)方法__set()echo"__set函數(shù)被調(diào)用了<br>"; echo"\$name={$name},\$value={$value}<br>"; $this->$name=$value;}}$a=newTest(); //實(shí)例化類Test$a->name="變量值"; //給變量賦值echo$a->name; //調(diào)用變量name?>8.5.2__get()方法當(dāng)需要調(diào)用一個(gè)未定義或不可見(jiàn)(私有)的成員變量時(shí),可以使用__get()方法讀取變量值。__get()方法有一個(gè)參數(shù),表示要調(diào)用的變量名。?【教師】通過(guò)多媒體展示例8-17的代碼和運(yùn)行結(jié)果,并進(jìn)行講解使用__get()方法訪問(wèn)私有屬性。實(shí)例代碼如下:<?phpclassTest{ //類Testprivate$data="私有變量"; //私有變量$datapublicfunction__get($value){ //聲明魔術(shù)方法__get()echo"__get函數(shù)被調(diào)用了<br>"; return$this->$value;}}$a=newTest(); //實(shí)例化類Test()echo$a->data; //調(diào)用私有變量$data?>8.5.3__call()方法當(dāng)程序試圖調(diào)用不存在或不可見(jiàn)的成員方法時(shí),PHP會(huì)自動(dòng)調(diào)用__call()方法來(lái)存儲(chǔ)方法名及其參數(shù)。該方法包含“方法名”和“方法參數(shù)”兩個(gè)參數(shù),其中的“方法參數(shù)”以數(shù)組形式存在。?【教師】通過(guò)多媒體展示例8-18的代碼和運(yùn)行結(jié)果,并進(jìn)行講解使用__call()方法。實(shí)例代碼如下:<?phpclassTest{ //類Test publicfunctionCheckOut(){ //方法 echo'如果調(diào)用的方法存在,則執(zhí)行此方法。<br>'; }publicfunction__call($m,$p){ //__call()方法 echo'當(dāng)調(diào)用的方法不存在時(shí),自動(dòng)執(zhí)行__call()方法。<br>';echo'方法名為:'.$m.'<br>'; //輸出第一個(gè)參數(shù),即方法名echo'參數(shù)有:'; var_dump($p); //輸出第二個(gè)參數(shù)}}$Me=newTest(); //實(shí)例化類Test()$Me->CheckOut(); //調(diào)用存在的方法CheckOut()$Me->Dream('one','two','three','four'); //調(diào)用不存在的方Dream()?>8.5.4__toString()方法__toString()方法用于在使用echo或print輸出對(duì)象時(shí),將對(duì)象轉(zhuǎn)化為字符串。?【教師】通過(guò)多媒體展示例8-19的代碼和運(yùn)行結(jié)果,并進(jìn)行講解使用__toStri

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論