PHP類和對(duì)象(1)

網(wǎng)站建設(shè)中,PHP 5開始引入了新的對(duì)象模型。完全重寫了PHP處理對(duì)象的方式,允許更佳性能和更多特性。本節(jié)將重點(diǎn)介紹PHP類和對(duì)象的定義和應(yīng)用,以幫助用戶掌握強(qiáng)大的對(duì)象化編程開發(fā)的方法和技巧。

定義和調(diào)用類

使用class關(guān)鍵字可以定義類,在類中可以聲明類成員和方法。例如,在下面示例中定義了類A,該類中包含一個(gè)方法f()。

<?phpclass A{    function f(){ echo "類方法";    }}?>

在類中,偽變量$this是一個(gè)對(duì)調(diào)用對(duì)象的引用,即引用類的實(shí)例。再看一個(gè)示例,在這個(gè)示例中分別聲明了類成員和方法。

<?phpclass A{    public $var = '默認(rèn)值';      //聲明成員    public function f(){         //聲明方法        echo $this->var;    }}?>

使用new關(guān)鍵字可以調(diào)用類,即使用new關(guān)鍵字創(chuàng)建一個(gè)對(duì)象的實(shí)例,然后就可以引用類成員和方法了。如:

<?php$a = new A();     //實(shí)例化類echo $a->var;    //引用對(duì)象的成員,顯示'默認(rèn)值'$a->f();         //引用對(duì)象的方法,顯示'默認(rèn)值'?>

當(dāng)把一個(gè)對(duì)象已經(jīng)創(chuàng)建的實(shí)例賦給一個(gè)新變量時(shí),新變量會(huì)訪問同一個(gè)實(shí)例,就和用該對(duì)象賦值一樣。此行為和給函數(shù)傳遞入實(shí)例時(shí)一樣??梢杂每寺〗o一個(gè)已創(chuàng)建的對(duì)象建立一個(gè)新實(shí)例。在一個(gè)類中可以使用extends關(guān)鍵字繼承另一個(gè)類的方法和成員。但不能擴(kuò)展多個(gè)類,只能繼承一個(gè)基類。例如,在下面示例中,分別定義A和B類,其中A是基類,B是子類,然后就可以在B類中調(diào)用基類的成員或者方法。

<?phpclas A{                        //定義A類    public $var = '默認(rèn)值';    //聲明成員public function f(){       //聲明方法        echo $this->var;    }}clas B extends A{             //定義B類    function e() {            //聲明方法        parent::f();          //調(diào)用A類的方法f()    }}$b = new B();                //實(shí)例化B類$b->e();                     //調(diào)用對(duì)象$b的e()方法,顯示'默認(rèn)值'

類屬性

類的變量成員被稱為屬性,或者字段、特征,本書統(tǒng)一稱為屬性。屬性聲明是由關(guān)鍵字public、protected或者private開頭,然后跟一個(gè)變量來組成。屬性中的變量可以初始化,但是初始化的值必須是常數(shù),這里的常數(shù)是指在編譯階段時(shí)就為常數(shù),而不是在編譯階段之后在運(yùn)行階段運(yùn)算出的常數(shù)。

類成員都必須使用關(guān)鍵字public、protected或private進(jìn)行定義。由public關(guān)鍵字定義的類成員可以在任何地方被訪問。由protected定義的類成員可以被其所在類的子類和父類訪問,當(dāng)然該成員所在的類也可以訪問。由private定義的類成員則只能被其所在類訪問。

為了兼容PHP 4,PHP 5聲明屬性依然可以直接使用關(guān)鍵字var,或者放在public、protected、private之前。但是var并不是必需的。如果直接使用var聲明屬性,而沒有public、protected或pri-vate,PHP 5會(huì)認(rèn)為這個(gè)屬性為public。

在類的成員方法里面,可以通過$this->property(property是屬性名字)這種方式來訪問類的屬性、方法,但是要訪問類的靜態(tài)屬性或者在靜態(tài)方法里面卻不能使用,而是使用self::$property。在類的非靜態(tài)方法里面可以使用偽變量$this,這個(gè)偽變量是調(diào)用該方法的實(shí)例化對(duì)象引用。

<?phpclass MyClass{    public $public = 'Public';    protected $protected = 'Protected';    private $private = 'Private';    function printHello() {        echo $this->public;        echo $this->protected;        echo $this->private;    }}$obj = new MyClass();echo $obj->public;         //正常執(zhí)行,顯示:publicecho $obj->protected;      //會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤echo $obj->private;        //會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤$obj->printHello();        //輸出:public、protected和private?>

類常量

在類中還可以定義常量,常量的值將始終保持不變,常量的值必須是一個(gè)定值,不能是變量、類屬性或其他操作(如函數(shù)調(diào)用)的結(jié)果。在定義和使用常量時(shí)不需要使用$符號(hào),常量的值不能為關(guān)鍵字self、parent或static。例如,在下面示例中定義并使用一個(gè)類常量。

<?phpclass MyClass{    const constant = '常量值';       //聲明類常量 function showConstant() {        echo  self:constant ."\n";   //在類方法中引用常量    }}echo MyClass::constant . "\n";      //直接讀取類常量$class = new MyClass();$class->showConstant();             //調(diào)用類的方法顯示常量值?>

網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷咨詢專線:0871-63535511(點(diǎn)擊可一鍵撥號(hào))