PSR-1 基礎編碼規範

来源:http://www.cnblogs.com/lamp01/archive/2017/08/24/7425540.html
-Advertisement-
Play Games

本篇規範制定了代碼基本元素的相關標準, 以確保共用的PHP代碼間具有較高程度的技術互通性。 關鍵詞 “必須”("MUST")、“一定不可/一定不能”("MUST NOT")、“需要”("REQUIRED")、 “將會”("SHALL")、“不會”("SHALL NOT")、“應該”("SHOULD" ...


本篇規範制定了代碼基本元素的相關標準, 以確保共用的PHP代碼間具有較高程度的技術互通性。

關鍵詞 “必須”("MUST")、“一定不可/一定不能”("MUST NOT")、“需要”("REQUIRED")、 “將會”("SHALL")、“不會”("SHALL NOT")、“應該”("SHOULD")、“不該”("SHOULD NOT")、 “推薦”("RECOMMENDED")、“可以”("MAY")和”可選“("OPTIONAL")的詳細描述可參見 RFC 2119 。

  1. 概覽


  • PHP代碼文件必須以 <?php 或 <?= 標簽開始;

  • PHP代碼文件必須以 不帶BOM的 UTF-8 編碼;

  • PHP代碼中應該只定義類、函數、常量等聲明,或其他會產生 從屬效應 的操作(如:生成文件輸出以及修改.ini配置文件等),二者只能選其一;

  • 命名空間以及類必須符合 PSR 的自動載入規範:PSR-4

  • 類的命名必須遵循 StudlyCaps 大寫開頭的駝峰命名規範;

  • 類中的常量所有字母都必須大寫,單詞間用下劃線分隔;

  • 方法名稱必須符合 camelCase 式的小寫開頭駝峰命名規範。

  1. 文件


2.1. PHP標簽

PHP代碼必須使用 <?php ?> 長標簽 或 <?= ?> 短輸出標簽; 一定不可使用其它自定義標簽。

2.2. 字元編碼

PHP代碼必須且只可使用不帶BOM的UTF-8編碼。

2.3. 從屬效應(副作用)

一份PHP文件中應該要不就只定義新的聲明,如類、函數或常量等不產生從屬效應的操作,要不就只有會產生從屬效應的邏輯操作,但不該同時具有兩者。

“從屬效應”(side effects)一詞的意思是,僅僅通過包含文件,不直接聲明類、 函數和常量等,而執行的邏輯操作。

“從屬效應”包含卻不僅限於:生成輸出、直接的 require 或 include、連接外部服務、修改 ini 配置、拋出錯誤或異常、修改全局或靜態變數、讀或寫文件等。

以下是一個錯誤的例子,一份包含聲明以及產生從屬效應的代碼:

<?php
// 從屬效應:修改 ini 配置
ini_set('error_reporting', E_ALL);

// 從屬效應:引入文件
include "file.php";

// 從屬效應:生成輸出
echo "<html>\n";

// 聲明函數
function foo()
{
    // 函數主體部分
}

下麵是一個範例,一份只包含聲明不產生從屬效應的代碼:

<?php
// 聲明函數
function foo()
{
    // 函數主體部分
}

// 條件聲明**不**屬於從屬效應
if (! function_exists('bar')) {
    function bar()
    {
        // 函數主體部分
    }
}
  1. 命名空間和類


命名空間以及類的命名必須遵循 PSR-4

根據規範,每個類都獨立為一個文件,且命名空間至少有一個層次:頂級的組織名稱(vendor name)。

類的命名必須 遵循 StudlyCaps 大寫開頭的駝峰命名規範。

PHP 5.3及以後版本的代碼必須使用正式的命名空間。

例如:

<?php
// PHP 5.3及以後版本的寫法
namespace Vendor\Model;

class Foo
{
}

5.2.x及之前的版本應該使用偽命名空間的寫法,約定俗成使用頂級的組織名稱(vendor name)如 Vendor_ 為類首碼。

<?php
// 5.2.x及之前版本的寫法
class Vendor_Model_Foo
{
}
  1. 類的常量、屬性和方法


此處的“類”指代所有的類、介面以及可復用代碼塊(traits)

4.1. 常量

類的常量中所有字母都必須大寫,詞間以下劃線分隔。 參照以下代碼:

<?php
namespace Vendor\Model;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

4.2. 屬性

類的屬性命名可以遵循 大寫開頭的駝峰式 ($StudlyCaps)、小寫開頭的駝峰式 ($camelCase) 又或者是 下劃線分隔式 ($under_score),本規範不做強制要求,但無論遵循哪種命名方式,都應該在一定的範圍內保持一致。這個範圍可以是整個團隊、整個包、整個類或整個方法。

4.3. 方法

方法名稱必須符合 camelCase() 式的小寫開頭駝峰命名規範。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 聲明:本人無意侵犯原作者的版權,這裡可下載的文檔都屬於作者自行開放下載的,統一放置在這裡是因為不可預測的原因使得原文檔和代碼不方便下載,故將我所收集的內容統一在這裡,如果這裡的內容侵犯了別人,請告知我會第一時間刪除,謝謝理解。 Java編程思想(英文第1版)+源代碼 Java編程思想(英文第2版) ... ...
  • 寫這篇文章的目的是想總結一下自己這麼多年來使用java的一些心得體會,主要是和一些java基礎知識點相關的,所以也希望能分享給剛剛入門的Java程式員和打算入Java開發這個行當的準新手們,希望可以給大家一些經驗,能讓大家更好學習和使用Java。 這次介紹的主要內容是和J2SE相關的部分,另外,會在 ...
  • 一、基於@ExceptionHandler 註解的異常處理方法: 1.加上<mvc:annotation-driven>標簽:(該標簽是標配,開發時一般都攜帶) 2.在當前Handler中定義由@ExceptionHandler註解修飾的方法,用於處理異常信息! @ExceptionHandler( ...
  • 1.1集合只存放引用類型的元素並且集合存放的時元素的引用(地址)1.2新迴圈遍歷集合 Collection c = new ArrayList(); c.add("one"); c.add("two"); c.add("three"); c.add("four"); /* * 新迴圈不是新的語法,j ...
  • 最近生產環境遇到記憶體老是占用很大的情況,16G的記憶體Free的記憶體只剩100多M,仿佛一顆定時炸彈一般,說不定就服務Down了。於是開始網上不斷的找查看記憶體使用的方法。現學現賣,以下通過一個例子來演示,共3步。 一、通過Top命令來查看進程情況,按Shift+M可按記憶體占用大小排序 二、通過ps命令 ...
  • 類的定義與對象的實例化操作 <?php //類裡面的成員是屬於對象的class Hero{ public $name;//成員變數 //成員屬性(存在於強類型語言中) protected $blood; private $attack; //成員方法 function skill(){ echo " ...
  • 今天編譯代碼,發現使用auto後無法編譯,我的當前linux內核版本:(4.7之後即可支持C++11) 這時,在編譯末尾加入 -std=c++11 就可以正常編譯了。如: ...
  • 有個人想知道,一年之內一對兔子能繁殖多少對?於是就築了一道圍牆把一對兔子關在裡面。已知一對兔子每個月可以生一對小兔子,而一對兔子從出生後第3個月起每月生一對小兔子。假如一年內沒有發生死亡現象,那麼,一對兔子一年內(12個月)能繁殖成多少對? 分析:兔子的規律為數列,1,1,2,3,5,8,13,21 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...