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
990
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
如何設計一套具備 Container 容器化技術的 CI/CD 平台?
appleboy
0
1.2k
生成式 AI CodeGPT 開發經驗談
appleboy
0
2.9k
打造 MLOps 平台 改善 AI 模型開發流程
appleboy
0
2.1k
自動化監控伺服器工具 - Gatus
appleboy
0
3.8k
Drone CI/CD 自動化測試及部署
appleboy
1
480
初探 Infrastructure as Code 工具 Pulumi
appleboy
2
3.5k
Introduction to Open Policy Agent
appleboy
0
1.9k
善用 Go 語言效能測試工具來提升執行效率
appleboy
2
4.3k
用 Go 語言打造多台機器 Scale 架構
appleboy
1
4.6k
Other Decks in Technology
See All in Technology
遷移の高速化 ヤフートップの試行錯誤
narirou
6
1.8k
AWSアカウントのセキュリティ自動化、どこまで進める? 最適な設計と実践ポイント
yuobayashi
7
850
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
540
急成長する企業で作った、エンジニアが輝ける制度/ 20250227 Rinto Ikenoue
shift_evolve
0
170
困難を「一般解」で解く
fujiwara3
7
1.5k
Amazon Athenaから利用時のGlueのIcebergテーブルのメンテナンスについて
nayuts
0
100
OPENLOGI Company Profile for engineer
hr01
1
20k
自分だけの仮想クラスタを高速かつ効率的に作る kubefork
donkomura
0
110
データエンジニアリング領域におけるDuckDBのユースケース
chanyou0311
9
2.4k
OPENLOGI Company Profile
hr01
0
60k
開発組織を進化させる!AWSで実践するチームトポロジー
iwamot
2
470
AIエージェント時代のエンジニアになろう #jawsug #jawsdays2025 / 20250301 Agentic AI Engineering
yoshidashingo
8
3.9k
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Designing Experiences People Love
moore
140
23k
For a Future-Friendly Web
brad_frost
176
9.6k
Navigating Team Friction
lara
183
15k
Documentation Writing (for coders)
carmenintech
67
4.6k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Mobile First: as difficult as doing things right
swwweet
223
9.5k
Designing for Performance
lara
604
68k
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 參考資料
謝謝