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

PHP 4 遷移至 PHP 5 完整指南:物件模型、介面、存取控制與建構子

     編輯:PHP 綜合知識

核心變更總覽

特性PHP 4PHP 5
物件傳遞值傳遞 (複製)參考傳遞 (handle)
建構子同類別名函數__construct()
解構子無__destruct()
存取控制全部 publicpublic/protected/private
介面無interface、implements
抽象類別無abstract class、abstract method
靜態成員無static 屬性/方法
最終類別/方法無final
類別常數無const
自動載入無__autoload() (後來 spl_autoload_register)
例外處理無try/catch/throw、Exception

遷移步驟實戰

1. 建構子重命名

_items['imgpath'] = 'images'; }
    function get($key) { return $this->_items[$key]; }
}

// PHP 5
class Config {
    private array $_items = [];
    public function __construct() { $this->_items['imgpath'] = 'images'; }
    public function get(string $key): mixed { return $this->_items[$key] ?? null; }
}

2. 加入存取控制

  • private:僅類別內部可存取
  • protected:類別與子類別可存取
  • public:公開介面
  • 預設建議 private,需要再放寬

3. 導入介面契約

data = parse_ini_file($file, true);
    }
    public function get(string $key): mixed { return $this->data[$key] ?? null; }
    public function set(string $key, mixed $value): void { $this->data[$key] = $value; }
}

4. 使用例外處理取代錯誤代碼

prepare($sql);
    $stmt->execute();
    return $stmt->fetchAll();
} catch (PDOException $e) {
    throw new RepositoryException('Query failed', 0, $e);
}

5. 靜態成員與晚期靜態綁定 (PHP 5.3+)

遷移檢查清單

  • [ ] 所有建構子改為 __construct()
  • [ ] 加入存取修飾詞
  • [ ] 介面化關鍵契約
  • [ ] 移除 & 參考傳遞 (物件預設參考)
  • [ ] 替換全域變數為依賴注入
  • [ ] 統一錯誤處理為例外
  • [ ] 實作 __autoload / Composer 自動載入
  • [ ] 測試序列化/反序列化行為 (__sleep/__wakeup)
  • [ ] 檢查 clone 行為 (淺拷貝 → 實作 __clone 深拷貝)

PHP 5.6 / 7.0 / 8.x 後續演進重點

  • 5.6:... 可變參數、** 冪次、常數標量運算式
  • 7.0:標量/回傳型別宣告、?? 空合併、<=> 太空船、匿名類別、錯誤改為例外
  • 7.1:可為 null 型別、void 回傳、對稱陣列解構
  • 7.4:型別屬性、箭頭函數、??=、預載入
  • 8.0:JIT、Union Types、Named Arguments、Attributes、Match Expression、Constructor Promotion
  • 8.1:Enums、Fibers、readonly、never、Final Constants
  • 8.2:Readonly Classes、DNF Types、Random Extension
  • 8.3:Typed Class Constants、json_validate、Randomizer
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved