1. 程式人生 > >PHP面向物件程式設計(1)基礎

PHP面向物件程式設計(1)基礎

一、面向物件OOP(Oriented Object Programming)

  1.   面向過程的程式設計
    • 將要實現的功能描述為一個從一開始到結束的連續的“步驟(過程)”。
    • 一次逐步完成這些步驟。如果步驟比較大,又可以將該步驟細分為子步驟,以此類推。
    • 程式從頭開始執行一直到結尾並得到手續的結果。

  2.  面向物件的程式設計

    • 將要實現的功能描述為一個“物件/物體”完成的任務一一實現也是如此:功能的實現都是依賴於一個實體的“行動/操作/動作”。
    • 完成該最終功能的過程中需要實現其他中間功能(過程)則再去呼叫其他物件來實現該中間功能
    • 整個系統的完成看做是一個一個物件在發揮各自的“能力”並在內部進行協調有序的呼叫過程。

  3.  基本概念

    1).類和物件

    • 類:類是現實世界或思維世界中的實體在計算機中的反映,它將資料以及這些資料上的操作封裝在一起。
    • 物件:物件是具有類型別的變數。類和物件是面向物件程式設計技術中的最基本的概念。
    • 關係:類是物件的抽象,而物件是類的具體例項。類是抽象的,不佔用記憶體,而物件是具體的,佔用儲存空間。類是用於建立物件的藍圖,它是一個定義包括在特定型別的物件中的方法和變數的軟體模板。

    2).類中成員

      (1)、一般屬性

      • 屬性是定義在類中的變數
      • 定義:[訪問修飾符] $變數名 [= 賦值(初值)];//賦值只能是一個“直接值”或常量
      • 使用形式:物件名->$變數名

      

      (2)、一般方法

      • 屬性是定義在類中的函式
      • 定義:[訪問修飾符] function 函式名(形參 1, 形參 2, ...) {語句塊} 
      • 使用形式:物件名->函式名
      • 方法中$thisi關鍵字有特定含義:表示呼叫該方法的物件
      • 獲取$this的所屬類:get_class($this)

      (3)、靜態屬性

      • 僅隸屬於類,通過類名直接使用
      • 定義:[訪問修飾符] static $靜態屬性名 [= 賦值(初值)];//賦值只能是一個“直接值”或常量
      • 使用形式:類名::$靜態屬性名

      (4)、靜態方法

      • 僅隸屬於類的函式,通過類名直接呼叫(新版php可以使用物件名來呼叫)
      • 定義形式:[訪問修飾符] static function 靜態方法名(形參 1, 形參 2, ...) {語句塊} 
      • 使用形式:類名::靜態方法名(實參 1, 實參 2, ...);//實參和形參一一對應
      • self關鍵字:用在方法中,表示該方法所在的類
      • static關鍵字:代替self關鍵字的位置,除了具有self作用外,還具有更靈活的作用,那就是所謂的“後期靜態繫結”
      • 注意1:$this在靜態方法中不能使用
      • 注意2:靜態方法不能呼叫非靜態方法
      • 注意3:靜態方法不用使用非靜態屬性

      (5)、類常量

      • 隸屬於類的常量
      • 定義形式:const 常量名 = 初值;//必須賦值
      • 使用:類名(物件名)::常量名

    3)、示例:

<?php
//定義一個類:圓
class circle {
    const PI = 3.14;//常量PI
    private $radius = 1;//半徑

    //設定半徑
    public function setRadius($radius) {
        $this->radius = $radius;
    }
    
    //計算圓的面積並返回結果
    public function area() {
        return circle::PI*$this->radius*$this->radius;
    }
    
    //返回常量PI的靜態函式
    public static function displayPI() {
        return circle::PI;
//        return $this->radius;//error不能呼叫非靜態屬性
    }
    
    //顯示半徑對應圓面積資訊
    public function display() {
        echo "半徑是".$this->radius."的圓的面積為:".$this->area()."<br />";
    }
}

//測試
$cir1 = new circle();
$cir1->setRadius(3);
$cir1->display();
echo "PI:".circle::displayPI()."<br />";

?>