[PHP] Autoloading Standard - PSR-0 VS PSR-4

PSR-0

  1. 完整的命名空間 fully-qualified namespace 與 類別 class 必須符合以下結構:
    \<vendor name>\(<namespace\>)*<class name>
  2. 每個命名空間 namespace 必須包含一個 頂級 top-level 的 namespace (vendor name)
  3. 每個命名空間 namecspace 可以擁有任意數量的 子命名空間 sub-namcespaces
  4. 載入檔案時,每個命名空間的分隔符號 separator 必須轉化成 目錄分隔符號
  5. 每個在類別名稱中的下畫線符號 "_" 都要轉化為 目錄分隔符號。該符號在命名空間裡沒有任何特別的用處。
  6. 載入時,完整的命名空間與類別 為 以 ".php" 為結尾的檔案
  7. 在 vendor name / namespace / class 中的字元可以是任意大小寫英文字母的組合

PSR-4

  1. 完整的命名空間 fully-qualified namespace 與 類別 class 必須符合以下結構:
    \<命名空間名稱>(\<子命名空間名稱>)*\<類別名稱>
    \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
  2. 完整的命名空間必須包含一個頂級 top-level 的命名空間名稱(namespace name) aka "vendor namespace"
  3. 完整的命名空間可以有一個或多個子命名空間名稱 sub-namespace name
  4. 完整的命名空間必須以類別名稱 class name 作結尾
  5. 下畫線符號 "_" 在完整命名空間中沒有特殊意義
  6. 完整的類別名稱可以是任意大小寫英文字母的組合
  7. 所有的類別名稱必須是大小寫敏感 case-sensitive
  8. 當載入對應完整類別名稱的檔案時,
    1. 在完整的類別名稱裡,不含最前面的命名空間名稱、子命名空間名稱以及分隔符號之外,要至少對應到一個 "基本目錄"。
    2. 子命名空間與其所對應的子目錄名稱之大小寫必須符合。
    3. 類別檔案的檔名要以 ".php" 作結尾,且檔名的大小寫必須與類別名稱相符。
  9. 實作自動載入時,不可以丟出例外,不可以提交任何等級的錯誤,且不應該有回傳值