日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > php入門教程之對象詳解

php入門教程之對象詳解

來源:程序員人生   發(fā)布時間:2013-10-15 18:47:20 閱讀次數(shù):3960次

php中對象包括很多內(nèi)容,如最常用的php類,接口,多態(tài)性 魔術(shù)方法(:_construct(),_destruct(),_clone)等.

類的聲明實例代碼如下:

  1. <?php 
  2.     權(quán)限修飾符 class 類名{   //權(quán)限修士符號:public,protected,private 或者省略3者. 
  3.       //類體;        //class 是建類關(guān)鍵字 
  4.     }             //類名必須跟在class 后面,且跟上{}.{}之間放類的成員. 
  5.   ?> 
  6. //ps:在class關(guān)鍵字前可以加權(quán)限修飾符外,還可以加static,abstract等關(guān)鍵字.一個類,即一對大括號之間的全部內(nèi)容都要在一段代碼段中,不允許將類中的內(nèi)容分割成對塊. 
  7. <?php 
  8.   class ConnDB{ 
  9.     //.... 
  10. ?> 
  11. <? 
  12.     //... 
  13.   }; 
  14. ?> 

成員屬性:

在類中直接聲明的變量稱為成員屬性/變量.其類型可以為php中的標(biāo)量類型和復(fù)合類型,使用資源類型和空類型是無效的.

此外,成員屬性的聲明時,必須要有關(guān)鍵字來修飾:有特定意義的關(guān)鍵字:public,protected,private ;不需要特定意義:var.聲明成員屬性時,沒有必要賦初始值.

成員常量:

以const常量修飾,例如:const PI = 3.1415926;

常量的輸出不需要實例化,直接由類名+常量名調(diào)用即可,格式為: 類名::常量名

ps. 特殊的訪問方法:--------"$this" 和 "::"

1) $"this" 存在于每個成員方法當(dāng)中,它是一個特殊的對象以用方法.成員方法屬于那個對象,$this應(yīng)用就代表那個對象,其作用就是專門完成對象內(nèi)部成員之間的訪問.

2) "::"成為作用域操作符,使用這個操作符可以在不創(chuàng)建對象的情況下調(diào)用類中的常量,變量和方法. 其語法格式如下:

關(guān)鍵字::變量名/常量名/方法名

關(guān)鍵字:parent,可以調(diào)用父類成員中的成員變量,成員方法和常量;

self,可以調(diào)用當(dāng)前類中的靜態(tài)成員和常量;

類名,可以調(diào)用類中的常量,變量和方法;   

成員方法:

在類中聲明的函數(shù)成為成員方法,在一個類中可以聲明多個函數(shù),即對象可以擁有多個成員方法.成員方法的聲明和函數(shù)的聲明相同,唯一特殊之處就是成員方法可以有關(guān)鍵字對它進(jìn)行修飾,從而控制其訪問權(quán)限.

類的實例化

創(chuàng)建對象:

$變量名 = new 類名稱([參數(shù)]); //類的實例化.

訪問類成員:

$變量名 -> 成員屬性 = 值;

構(gòu)造方法和析構(gòu)方法

構(gòu)造方法是對象創(chuàng)建完成后第一個唄對象自動調(diào)用的方法.它存在每個類的聲明當(dāng)中,是一個特殊的成員方法,一般用來完成一些初始化操作.如果類中沒有構(gòu)造方法,系統(tǒng)會默認(rèn)自動生成一個沒有參數(shù)的構(gòu)造方法.

實例代碼如下:

 

  1. function _construct(形參列表){ 
  2.       //方法體 
  3.     }; 

析構(gòu)方法則如構(gòu)造方法相反,它是在對象被銷毀前最后一個調(diào)用的方法.它將完成一個特定的操作,如關(guān)閉文件和釋放內(nèi)存.

實例代碼如下:

  1. function _destruct(){ 
  2.       //方法體  
  3.     }; 

面向?qū)ο筇攸c:封裝性,抽象性,多態(tài)性.

封裝:

將類中的成員屬性和方法結(jié)合成一個獨立的相同單位,并且盡可能的隱藏對象的內(nèi)容細(xì)節(jié).其目的是確保類以外的部分不能隨意存取類的內(nèi)部數(shù)據(jù)(成員屬性和成員方法),從而避免外部錯誤對內(nèi)部數(shù)據(jù)的影響.

類的封裝是通過關(guān)鍵字public,private,protected,static和final實現(xiàn)的.各關(guān)鍵字的作用請查看php相關(guān)文檔.

繼承性:

使一個類繼承并擁有另一個已存在的類的成員屬性和成員方法,其中被繼承的類成為父類,繼承的類成為子類.通過繼承能夠提高代碼的重用性和可維護(hù)性.類的繼承用 extends 關(guān)鍵字.

實例代碼如下:

  1. class 子類名稱 extends 父類名稱{ 
  2.       //子類方法體. 
  3.     } 

通過parent::關(guān)鍵字也可以在子類方法中調(diào)用父類的成員方法,格式如下:

parent::父類的成員方法(參數(shù));

覆蓋父類的方法:

所謂的覆蓋父類的方法,也就是使用子類中的方法替換從父類中繼承的方法,也叫方法的重寫.重寫的關(guān)鍵就在與子類中創(chuàng)建與父類中相同的方法,g包括方法名稱,參數(shù)和返回類型.

多態(tài)性是指一段程序能夠處理多種類型對象的能力.php多態(tài)有兩種實現(xiàn)方法,即通過繼承實現(xiàn)多態(tài)和通過接口實現(xiàn)多態(tài).

通過繼承實現(xiàn)多態(tài),即通過重寫繼承的成員方法來達(dá)到多態(tài)的效果.

實例代碼如下:

  1. <?php 
  2.    abstract class ParentClass{ 
  3.           abstract function printMessage();     
  4.     } 
  5.     class SubClassA extends ParentClass{ 
  6.            function printMessage(){ 
  7.                echo "i am message from class A"
  8.            } 
  9.     } 
  10.     class SubClassB extends ParentClass{ 
  11.            function printMessage(){ 
  12.                echo "i am message from class B"
  13.            } 
  14.     } 
  15.      
  16.     function printMSG($object){ 
  17.        if$object instanceof ParentClass){ 
  18.            $object->printMessage(); 
  19.        }else
  20.             echo "error!"
  21.        } 
  22.     } 
  23.     $objectA=new SubClassA(); 
  24.     printMSG($objectA); 
  25.     $objectB=new SubClassB(); 
  26.     printMSG($objectB); 
  27. ?> 

通過接口實現(xiàn)多態(tài),通過定義接口,與空方法.然后類繼承接口.

實例代碼如下:

  1. <?php 
  2.     interface interfaceInfo{ 
  3.            function printMessage(); 
  4.     } 
  5.      
  6.     class ClassA implements interfaceInfo{ 
  7.          function printMessage(){ 
  8.                  echo "message form class A"
  9.          } 
  10.     } 
  11.      
  12.     class ClassB implements interfaceInfo{ 
  13.          function printMessage(){ 
  14.                  echo "message form class B"
  15.          } 
  16.     } 
  17.     function printMSG($object){ 
  18.              if($object instanceof interfaceInfo){ 
  19.                        $object -> printMessage(); 
  20.              }else
  21.                         echo "error !"
  22.               } 
  23.     } 
  24.      
  25.     $objectA =new ClassA(); 
  26.     printMSG($objectA); 
  27.      $objectB =new ClassB(); 
  28.     printMSG($objectB); 
  29. ?> 

抽象類和接口.

抽象類和接口都是不能被實例化的特殊類.他們都是能夠配合面向?qū)ο蠖鄳B(tài)性一起使用.

抽象類:

抽象類是一種不能實例化的類,只能作為其他類的父類來使用.抽象類使用abstract 關(guān)鍵字來聲明,其格式如下:

實例代碼如下:

  1. abstract class 抽象類名{ 
  2.       abstract function 成員方法(參數(shù));// 
  3.     } 

抽象類和普通類相似,包含成員變量,成員方法.兩者區(qū)別在于抽象類至少要包含一個抽象方法.抽象方法沒有方法體,其功能的實現(xiàn)只能在子類中完成.抽象方法也使用關(guān)鍵字 abstract 來修飾.

接口:

繼承特性簡化了對象和類的創(chuàng)建,增強了代碼的可重用性.但php只支持單繼承,如果想實現(xiàn)多重繼承,就要使用接口.

接口的聲明:通過interface 關(guān)鍵字來實現(xiàn),接口中聲明的方法必須是抽象方法,接口中不能聲明變量,只能使用const 關(guān)鍵字聲明為常量的成員屬性,并且接口中所有成員都必須具備puclic 的訪問權(quán)限.ainterface 聲明接口格式如下:

實例代碼如下:

  1. inerface 接口名稱{ 
  2.            //常量成員;//成員只能是常量. 
  3.           //抽象方法; 
  4.   } 

由于接口不能實現(xiàn)實例化操作,因此只能借助子類繼承接口的形式來實現(xiàn).實現(xiàn)的格式是:

實例代碼如下:

  1. Class 子類名 implements 接口名1[,接口名2,接口名3,.....]{ 
  2.   //子類方法體. 

常用關(guān)鍵字:

1)  final:final之意為最終的,最后的.這就以為著通過final 關(guān)鍵字修飾的類和方法都為最終版本.不能被繼承,也不能有子類.不能重寫,也不能被覆蓋.

2)  static: 通過static 關(guān)鍵字修飾的成員屬性和成員方法稱為靜態(tài)屬性和靜態(tài)方法.靜態(tài)成員屬性和方法不需要被實例化就能直接使用.

靜態(tài)屬性:它屬于類本身,而不屬于類的任何實例.它相當(dāng)于存儲在類中的全局變量,可以在任何位置通過類來訪問.訪問格式為:

類名稱::$靜態(tài)屬性名稱;

如果你要在類內(nèi)部的成員方法中訪問靜態(tài)屬性,那么在靜態(tài)屬性的名稱前加上操作符: "self::" 即可.

靜態(tài)方法:由于其不受任何對象限制,因此可以不通過類的實例化而直接引用類中的靜態(tài)方法.引用格式如下:

類名稱::靜態(tài)方法名(參數(shù));

如果你要在類內(nèi)部的成員方法中調(diào)用靜態(tài)方法,那么在靜態(tài)方法的名稱前加上操作符: "self::" 即可.在靜態(tài)方法中只能調(diào)用靜態(tài)變量,而不能調(diào)用普通變量;而普通方法中則可以調(diào)用靜態(tài)變量.

使用靜態(tài)成員除了不需要實例化外,另一個作用是在對象被銷毀后,仍然保留唄修改的靜態(tài)數(shù)據(jù),以便下次調(diào)用.

3) clone.對象的克隆可以通過關(guān)鍵字來實現(xiàn).使用clone對象與原對象沒有任何關(guān)系,即克隆對象會重新申請一份存儲空間來存放原對象內(nèi)容.格式如下:

$克隆對象 = clone $原克隆對象名稱;

克隆成功后,他們的n成員方法,屬性以及值完全相等.如果要對副本重新初始化,就要用到 _clone().

魔術(shù)方法_clone()可以對克隆后的副本對象重新初始化.它不需要任何參數(shù),其中自動包含$this (副本對象)和 $that (原對象) 對象的引用.

對象的比較:

"==" 表示比較兩個對象的內(nèi)容,"==="表示比較兩個對象的引用地址相等.

對象類型的檢測: instanceof 操作符可以檢測當(dāng)前對象屬于那個對象.

面向?qū)ο?--常用魔術(shù)方法:

以上我們已經(jīng)了解的常用魔術(shù)方法有:_construct(),_destruct(),_clone.下面我們再接著介紹幾個常用魔術(shù)方法.

_get(),_set();

以上兩個方法用于對私有成員精細(xì)復(fù)制或者獲取值的操作.

_set()在程序運行中為私有的成員屬性設(shè)置值,它不需要任何返回值._set()方法包括兩個不可省略的參數(shù):變量名和變量值.這個方法不需要主動調(diào)用,可在方法錢加上prive關(guān)鍵字.

_get():在程序運行中,在對象的外部獲取私有成員的屬性的值.他有一個參數(shù):私有成員屬性名稱.他返回一個允許對象在外部使用的值.此方法同樣不許主動調(diào)用.

_isset(),_unset():

isset()函數(shù)用于檢測變量是否存在.而在面向?qū)ο笾锌梢酝ㄟ^isset()函數(shù)對公有的成員屬性進(jìn)行檢測,但對私有成員屬性,此函數(shù)則不起作用.因此,_isset()函數(shù)正是為了起到此作用而創(chuàng)建.格式如下:

bool _isset(string name);

_unset()則同樣為了刪除制定的變量和對象的私有成員屬性.格式如下:

void _unset(string name);//

_call():

_call()方法的作用是當(dāng)程序試圖調(diào)用不存在或不可見的成員方法時,php會先調(diào)用_call()方法來存儲方法名及其參數(shù)(方法名和方法參數(shù)).其中方法參數(shù)是以數(shù)組的形式存在.

_toString()方法:

其作用是當(dāng)使用echo 或者print輸出對象時,將對象轉(zhuǎn)化為字符串.

如果沒有_toString()方法,直接輸出對象時將會發(fā)生致命錯誤.

輸出對象時應(yīng)注意的是,echo 或print 語句后面直接跟要輸出的對象,中間不要加多余的字符,否則_toSting()將不會被執(zhí)行.

_autoload()方法:

將一個獨立的,完整的類保存到一個php頁中,并且文件名和類名保持一致,這是每個開發(fā)人員都需要養(yǎng)成的良好習(xí)慣.這樣下次在使用的時候就能夠輕松的找到它.但有一種情況:如果要在一個頁面中引進(jìn)很多的類,就需要使用include_once()函數(shù)或者require_once()函數(shù)一個個地引入.php5中引入_autoload()方法可以自動實例化需要使用的類.當(dāng)一個類還沒實例化時,_autoload()會自動到指定的路徑下面自動查找和類名相同的文件.找到則繼續(xù)執(zhí)行,否則報錯.

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: av2区| 亚洲精品福利在线 | 国产伦精品一区 | 国产中文字幕在线播放 | 国产精品毛片一区二区在线看 | 中文字幕一区二区三区日韩精品 | 久久免费视频在线 | 日韩欧美中出 | 久久精品成人一区二区三区蜜臀 | 国产成人在线一区二区 | 黄色大片免费观看 | 污网站免费观看 | 亚洲天堂免费观看 | 久久久久久久久国产精品 | 国产午夜视频在线观看 | 狠狠久久综合 | 久久精品免费播放 | 亚洲一区二区精品视频 | 久久国产日韩欧美 | 免费黄色在线观看 | avtt在线观看 | 国产成人影院 | 国产精选久久 | 久久99精品久久久久久秒播放器 | 亚洲第一在线 | 色综合久久久久 | 少妇做爰xxxⅹ性视频 | 精品久久久久久国产 | 国产高清在线视频 | 日韩福利在线 | 久久99精品久久久久久久久久久久 | 黄色的网站在线观看 | 中文字幕日韩欧美一区二区三区 | 精品欧美一区二区三区久久久 | 在线观看欧美日韩 | 激情欧美一区 | 亚洲国产综合网 | 综合久久久久 | 国产精品不卡在线 | 久久久久国产精品 | 正在播放国产一区 |