首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP5 面向對象編程:可見性控制與封裝實踐

     編輯:PHP 相關知識

第八節:可見性

PHP5 引入三種可見性修飾符,構建可靠 OOP 應用與可重用類庫的基石:

修飾符訪問範圍
public無限制,任何代碼可讀寫/調用
private僅類內部可見,子類不可訪問
protected類內部 + 所有子類可見

未指定預設為 public。靜態成員同樣支援可見性,寫法如 public static。

Private 封裝範例

<?php
class Widget {
    private $name; private $price; private $id;
    public function __construct($name, $price) {
        $this->name = $name;
        $this->price = floatval($price);  // 強制類型
        $this->id = uniqid();
    }
    public function equals($widget) {
        return ($this->name == $widget->name) && ($this->price == $widget->price);
    }
}
$w1 = new Widget("Cog", 5.00);
$w2 = new Widget("Cog", 5.00);
$w1->equals($w2);  // true,雖然 id 不同
?>

equals() 可訪問另一實例的 private 屬性——同類實例間互信。

Getter/Setter 模式

私有屬性對外暴露需透過 getXxx()/setXxx(),構造函數可做初始驗證(如 floatval()),實現窄介面與數據驗證。

Protected 子類擴展

class Thing extends Widget {
    public function getName() { return parent::getName(); }  // 訪問父類 protected 方法
}

外部代碼調用 $w1->getName() 會報錯,但子類內部可訪問。

覆寫規則與 final

  • public → 必須保持 public
  • protected → 可維持或放寬為 public
  • private → 不可覆寫(同名屬性視為新成員)
  • final 方法禁止子類覆寫(僅適用方法,不適用屬性)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved