Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Matainable PHP Source Code
Search
Bo-Yi Wu
July 25, 2012
Technology
2
1.1k
Matainable PHP Source Code
How to write matainable PHP Source Code
Bo-Yi Wu
July 25, 2012
Tweet
Share
More Decks by Bo-Yi Wu
See All by Bo-Yi Wu
Building a Unified API Gateway for Secure and Scalable Cross-Cloud AI Service
appleboy
0
1k
Building MCP (Model Context Protocol) with Golang
appleboy
0
2.2k
如何設計一套具備 Container 容器化技術的 CI/CD 平台?
appleboy
0
1.5k
生成式 AI CodeGPT 開發經驗談
appleboy
0
3.1k
打造 MLOps 平台 改善 AI 模型開發流程
appleboy
0
2.3k
自動化監控伺服器工具 - Gatus
appleboy
0
4.1k
Drone CI/CD 自動化測試及部署
appleboy
1
510
初探 Infrastructure as Code 工具 Pulumi
appleboy
2
3.6k
Introduction to Open Policy Agent
appleboy
0
2.1k
Other Decks in Technology
See All in Technology
テストを軸にした生き残り術
kworkdev
PRO
0
200
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
240
人工衛星のファームウェアをRustで書く理由
koba789
15
7.8k
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
220
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
3
400
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
440
Terraformで構築する セルフサービス型データプラットフォーム / terraform-self-service-data-platform
pei0804
1
170
AI開発ツールCreateがAnythingになったよ
tendasato
0
130
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
220
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
160
未経験者・初心者に贈る!40分でわかるAndroidアプリ開発の今と大事なポイント
operando
5
480
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
400
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.6k
Code Review Best Practice
trishagee
70
19k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Music & Morning Musume
bryan
46
6.8k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Code Reviewing Like a Champion
maltzj
525
40k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
A Modern Web Designer's Workflow
chriscoyier
696
190k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Transcript
Maintainable PHP Source Code Bo-Yi Wu 吳柏毅 2012.07.21 http://blog.wu-boy.com/
維護 PHP 專案程式碼 為什麼大家需要關心呢 ?
因為 我們每天花了很多時間在維護程式碼
維護 PHP 專案程式碼 誰最關心呢 ?
公司員工 : 趕快把程式碼寫完來去看電影 公司老闆 : 請給我一個可以擴充性的架構
員工 A: 奇怪這是誰寫的 Code 這麼亂 員工 B: 員工 A 寫的架構好像怪怪的
?
為什麼大家會有這些想法呢?
那是因為沒有共同制定的 Coding Style
沒有好的 Coding Style 對於一個專案主管是非常痛苦
那什麼是易於維護的程式碼 Maintainable Code
四項必定要求 非常直覺 容易了解 可擴充性 容易 Debug
進入今日主題 Code Style Guide 程式設計師互相溝通的語言
各式各樣的編輯器 Tabs vs 4 Spaces
None
None
使用 Space 易於閱讀 Diff 程式碼
None
None
所以請將編輯器設定為 (Replaces tabs by spaces) 4 Spaces 取代 Tabs
程式碼結尾請勿有 多餘的空白
正規取代驗證多餘空白 ^(.*[^\s])?\s+$
^(.*[^\s])?\s+$ 開頭 結尾
^(.*[^\s])?\s+$ 代表 $1 結尾符號
^(.*[^\s])?\s+$ 結尾無空白
^(.*[^\s])?\s+$ $1 可有可無
^(.*[^\s])?\s+$ 結尾為空白
Geany Editor
檔案命名
請一律以小寫命名
檔案內容宣告
只使用 <?php 或 <?= 標籤
PHP5.4 以後 取消 short_open_tag 直接使用 <?= 標籤
檔案結尾請忽略 ?> 標籤
檔案格式
use only UTF-8 without BOM for PHP code 避免資料庫連線字元問題
如何寫程式註解 註解上面必須空一行
None
None
如何寫函式註解 註解上面必須空一行
None
變數命名
請使用 小寫英文字母或底線
None
None
常數命名
請使用 大寫英文字母或底線 ( 定義在同一檔案內 )
None
PHP Keywords
true, false, null array, integer, string
請一律用小寫
None
條件判斷式 (Control Structures)
if, for, foreach, while, switch
if, for, foreach, while, switch
if ($arg === true) { //do something here } elseif
($arg === null) { //do something else here } else { //catch all do something here }
單行條件式過長
if (($a == $b) and ($b == $c) or ($a
== $e) ) { $a = $d; }
if($arg === true) { //do something here } elseif($arg ===
null) { //do something else here } else { //catch all do something here } 條件式 if 括號旁邊請留一個空白
If, for, foreach, while, switch
<?php for ($i = 0; $i < $max; $i++) {
//loop here }
<?php for ($i=0; $i<$max; $i++) { //loop here } 邏輯符號
=,< 左右兩邊請留一個空白
If, for, foreach, while, switch
<?php foreach ($iterable as $key => $value) { // foreach
body }
If, for, foreach, while, switch
<?php while ($expr) { // structure body } <?php do
{ // structure body; } while ($expr);
If, for, foreach, while, switch
switch ($var) { case 0: echo 'First case, with a
break'; break; case 1: echo 'Second case, which falls through'; // no break case 2: case 3: echo 'Third case, return instead of break'; return; default: echo 'Default case'; break; }
判斷式內容請勿寫在同一行
None
None
替代 if 方案
取代 if (isset($var)) { $var = 'test'; }
isset($var) and $var = 'test';
if (isset($variable)) { $variable = 'test1'; } else { $variable
= 'test2'; } 不建議此寫法
$var = isset($var) ? 'test1' : 'test2'; $var = isset($var)
?: 'default';
邏輯符號表式
請用 and or 取代 && || 讓程式更容易閱讀
此用法僅限於 === 或 !== 或 function 回傳值
運算元計算 請使用 && 或 ||
邏輯符號左右兩邊 請留一個空白
if ($var == false and $other_var != 'some_value') if ($var
=== false or my_function() !== false) if ( ! $var)
PHP 物件表示
/** * Documentation Block Here */ class Session { //
all contents of class // must be indented four spaces public function test() {} }
/** * Documentation Block Here */ class Session { /**
* Documentation Block Here */ public function get_flash($name, $data) { $closure = function($a, $b) { // Your closure code here } } }
物件內部變數或函式 務必定義 private,protected,public
/** * Documentation Block Here */ class Session { var
$test = null; /** * Documentation Block Here */ function get_flash($name, $data) { // Your code here } } 請勿使用 var 定義變數
單引號或雙引號 ?
用單引號更勝於雙引號 ( 只是為了統一 Code Style)
別再相信 單引號效能大於雙引號
有興趣請看效能評估 http://nikic.github.com/2012/01/09/Disproving-the- Single-Quotes-Performance-Myth.html
字串連接 Concatenation
$string = 'my string '.$var.' the rest of my string';
變數旁邊請留空白
$string = 'my string ' . $var . ' the
rest of my string';
字串如果過長呢 ? 例如 SQL 語法
$sql = "SELECT `id`, `name` FROM `people` " . "WHERE
`name` = 'Susan' " . "ORDER BY `name` ASC ";
今天就講到這裡 大家有什麼問題
PHP Framework Interop Group PSR0 PSR1
PSR2 Zend Framework Coding Standard for PHP 參考資料
謝謝