php物件導向之抽像類、介面、final、類常量

來源:互聯網
上載者:User

一、抽像類(abstract)
        在我們實際開發過程中,有些類並不需要被執行個體化,如前面學習到的一些父類,主要是讓子類來繼承,這樣可以提高代碼複用性
文法結構:
  

 代碼如下 複製代碼
  abstract class 類名{
        屬性 $name;
        方法(){}  //方法也可以為abstract 修飾符 function 方法名(){}
    }

例:
   

 代碼如下 複製代碼
abstract class animal{
        public $name;
        public $age;
        //抽象方法不能有方法體,主要是為了讓子類去實現;
        abstract public function cry();
        //抽象類別中可以包含抽象方法,同時也可以包含執行個體類方法
        public function getname(){
            echo $this->name;
        }
    }
    class Cat{
        public function cry(){
            echo 'ok';
        }
    }

 
    理解:動物類,實際上是一個抽象的概念,它規定了一些動物有些哪共同的屬性和行為,但實際上它自己並沒收有那些屬性和行為。再比如:交通工具類,植物類等等
 
注意:
    1、如果一個類用了abstract來修飾,則該類就是一個抽象類別,如果一個方法被abstract修飾,那麼該方法就是一個抽象方法,抽象方法不能有方法體=> abstract function cry();  連{}也不可以有
    2、抽象類別一定不能被執行個體化,抽象類別可以沒有抽象方法,但是如果一個類包含了任意一個抽象方法,這個類一定要聲明為abstract類;
    3、如果一個類繼承了另一個抽象類別,則該子類必須實現抽象類別中所有的抽象方法(除非它自己也聲明為抽象類別);
 
二、介面(interface)
        介面就是將一些沒有實現的方法,封裝在一起,到某個類要用的時候,再根據具體情況把這些方法寫出來;
        文法結構
         

 代碼如下 複製代碼
   interface 介面名{
                //屬性、方法
                //介面中的方法都不能有方法體;
            }
            如何?介面
            class 類名 implements 介面名{
 
            }

        理解:介面就是更加抽象的抽象類別,抽象類別裡的方法可以有方法體,但是介面中的方法必須沒有方法體。介面實現了程式設計的多態和高內聚、低偶合的設計思想;
 
例:
     

 代碼如下 複製代碼
   //介面是定義規範、屬性的,一般以小寫i開頭;
        interface iUsb{
            public function start();
            public function stop();
        }
        //編寫相機類,讓它去實現介面
        //當一個類實現了某個介面,那麼該類就必須實現介面的所有方法
        class Camera implements iUsb{
            public function start(){
                echo 'Camera Start Work';
            }
            public function stop(){
                echo 'Camera Stop Work';
            }
        }
        //編寫一個手機類
        class Phone implements iUsb{
            public function start(){
                echo 'Phone Satrt Work';
            }
            public function stop(){
                echo 'Phone Stop Work';
            }
        }
        $c=new Camera();
        $c->start();
        $p=new Phone();
        $p->start();

 
    什麼時候使用介面:
        1、定下規範,讓其他程式員來實現
        2、當多個平級的類,都需要去實現某個功能,但是實現的方式不一樣;
 
    小結:
        1、介面不能被執行個體化,介面中所有的方法都不能有主體;
        2、一個類可以實現多個介面,以逗號(,)分隔 class demo implements if1,if2,if3{}
        3、介面中可以有屬性,但必須是常量,常量不可以有修飾符(預設是public修飾符)
            如:interface iUsb{
                        const A=90;
                    }
                    echo iUsb::A;
        4、介面中的方法都必須是public的,預設是public;
        5、一個介面不能繼承其他的類,但是可以繼承其它的介面,一個介面可以繼承多個其它介面
            如:interface 介面名 extends if1,if2{}
        6、一個類可以在繼承父類的同時實現其它介面
            如:class test extends testbase implements test1,test2{}
 
實現介面VS繼承類
php的繼承是單一繼承,也就是一個類只能繼承一個父類,這樣對子類功能的擴充有一定的影響。實現介面可以看做是對繼承類的一個補充。繼承是層級的關係,不太靈活,而實現介面是平級的關係,實現介面可以在不打破繼承關係的前提下,對某個功能擴充,非常靈活。
 
三、Final
 
1、如果我們希望某個類不被其它的類繼承(比如為了安全原因等。。),那麼可以考慮使用final
    文法:
            final class A{}
2、如果我們希望某個方法,不被子類重寫,可以考慮使用final來修飾,final修飾的方法還是可以繼承的,因為方法的繼承權取決於public的修飾
    如:

 代碼如下 複製代碼
class A{
                final public function getrate($salary){
                    return $salary*0.08;
                }
            }
            class B extens A{
                //這裡父類的getrate方法使用了final,所以這裡無法再重寫getrate
                //public function getrate($salary){
                //    return $salary*0.01;
                //}
            }

   3、final不能用來修飾屬性        
 
四、類常量(const)
 
在某些情況下,可能有這樣的需求:當不希望一個成員變數被修改,希望該變數的值是固定不變的,這時可以使用const常量(常量名應該全用大寫,並且不帶$符號,常量不可以加修飾符)
文法:
        const 常量名=常量值;  //必須賦初值,因為常量是不能修改的
調用:
        類名::常量名[本類內部可用self::常量名]   或者  介面名::常量名  //介面中只能使用常量,不能使用變數
 
如:
 

 代碼如下 複製代碼
class A{
    const TAX_RATE=0.08;
    function paytax($salary){
        return $salary*self::TAX_RATE;
    }
}
$a=new A();
echo $a->paytax(100);

 
註:
    1、常量可以被子類繼承
    2、常量是屬於某個類的,而不屬於某個對象
雖然實現很簡單但大家只要有點基礎知識就可以方便快速的實現php物件導向編輯操作了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.