Top Banner
Maintainable PHP Source Code Bo-Yi Wu 吳柏毅 2012.07.21 http://blog.wu-boy.com/
98

Maintainable PHP Source Code

Aug 20, 2015

Download

Technology

Bo-Yi Wu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Maintainable PHP Source Code

Maintainable PHP Source Code

Bo-Yi Wu 吳柏毅2012.07.21

http://blog.wu-boy.com/

Page 2: Maintainable PHP Source Code

維護 PHP 專案程式碼為什麼大家需要關心呢 ?

Page 3: Maintainable PHP Source Code

因為我們每天花了很多時間在維護程式碼

Page 4: Maintainable PHP Source Code

維護 PHP 專案程式碼誰最關心呢 ?

Page 5: Maintainable PHP Source Code

公司員工 : 趕快把程式碼寫完來去看電影

公司老闆 : 請給我一個可以擴充性的架構

Page 6: Maintainable PHP Source Code

員工 A: 奇怪這是誰寫的 Code 這麼亂

員工 B: 員工 A 寫的架構好像怪怪的 ?

Page 7: Maintainable PHP Source Code

為什麼大家會有這些想法呢?

Page 8: Maintainable PHP Source Code

那是因為沒有共同制定的

Coding Style

Page 9: Maintainable PHP Source Code

沒有好的 Coding Style對於一個專案主管是非常痛苦

Page 10: Maintainable PHP Source Code

那什麼是易於維護的程式碼Maintainable Code

Page 11: Maintainable PHP Source Code

四項必定要求

非常直覺 容易了解 可擴充性 容易 Debug

Page 12: Maintainable PHP Source Code

進入今日主題

Code Style Guide程式設計師互相溝通的語言

Page 13: Maintainable PHP Source Code

各式各樣的編輯器

Tabs vs 4 Spaces

Page 14: Maintainable PHP Source Code
Page 15: Maintainable PHP Source Code
Page 16: Maintainable PHP Source Code

使用 Space 易於閱讀 Diff 程式碼

Page 17: Maintainable PHP Source Code
Page 18: Maintainable PHP Source Code
Page 19: Maintainable PHP Source Code

所以請將編輯器設定為(Replaces tabs by spaces)

4 Spaces 取代 Tabs

Page 20: Maintainable PHP Source Code

程式碼結尾請勿有多餘的空白

Page 21: Maintainable PHP Source Code

正規取代驗證多餘空白

^(.*[^\s])?\s+$

Page 22: Maintainable PHP Source Code

^(.*[^\s])?\s+$

開頭 結尾

Page 23: Maintainable PHP Source Code

^(.*[^\s])?\s+$

代表 $1 結尾符號

Page 24: Maintainable PHP Source Code

^(.*[^\s])?\s+$

結尾無空白

Page 25: Maintainable PHP Source Code

^(.*[^\s])?\s+$

$1 可有可無

Page 26: Maintainable PHP Source Code

^(.*[^\s])?\s+$

結尾為空白

Page 27: Maintainable PHP Source Code

Geany Editor

Page 28: Maintainable PHP Source Code

檔案命名

Page 29: Maintainable PHP Source Code

請一律以小寫命名

Page 30: Maintainable PHP Source Code

檔案內容宣告

Page 31: Maintainable PHP Source Code

只使用 <?php 或 <?= 標籤

Page 32: Maintainable PHP Source Code

PHP5.4 以後取消 short_open_tag直接使用 <?= 標籤

Page 33: Maintainable PHP Source Code

檔案結尾請忽略 ?> 標籤

Page 34: Maintainable PHP Source Code

檔案格式

Page 35: Maintainable PHP Source Code

use only UTF-8 without BOM for PHP code

避免資料庫連線字元問題

Page 36: Maintainable PHP Source Code

如何寫程式註解註解上面必須空一行

Page 37: Maintainable PHP Source Code
Page 38: Maintainable PHP Source Code
Page 39: Maintainable PHP Source Code

如何寫函式註解註解上面必須空一行

Page 40: Maintainable PHP Source Code
Page 41: Maintainable PHP Source Code

變數命名

Page 42: Maintainable PHP Source Code

請使用小寫英文字母或底線

Page 43: Maintainable PHP Source Code
Page 44: Maintainable PHP Source Code
Page 45: Maintainable PHP Source Code

常數命名

Page 46: Maintainable PHP Source Code

請使用大寫英文字母或底線

( 定義在同一檔案內 )

Page 47: Maintainable PHP Source Code
Page 48: Maintainable PHP Source Code

PHP Keywords

Page 49: Maintainable PHP Source Code

true, false, null array, integer, string

Page 50: Maintainable PHP Source Code

請一律用小寫

Page 51: Maintainable PHP Source Code
Page 52: Maintainable PHP Source Code

條件判斷式(Control Structures)

Page 53: Maintainable PHP Source Code

if, for, foreach, while, switch

Page 54: Maintainable PHP Source Code

if, for, foreach, while, switch

Page 55: Maintainable PHP Source Code

if ($arg === true) { //do something here}elseif ($arg === null) { //do something else here}else { //catch all do something here}

Page 56: Maintainable PHP Source Code

單行條件式過長

Page 57: Maintainable PHP Source Code

if (($a == $b) and ($b == $c) or ($a == $e)) { $a = $d;}

Page 58: Maintainable PHP Source Code

if($arg === true) { //do something here}elseif($arg === null) { //do something else here}else { //catch all do something here}

條件式 if 括號旁邊請留一個空白

Page 59: Maintainable PHP Source Code

If, for, foreach, while, switch

Page 60: Maintainable PHP Source Code

<?phpfor ($i = 0; $i < $max; $i++) { //loop here}

Page 61: Maintainable PHP Source Code

<?phpfor ($i=0; $i<$max; $i++) { //loop here}

邏輯符號 =,< 左右兩邊請留一個空白

Page 62: Maintainable PHP Source Code

If, for, foreach, while, switch

Page 63: Maintainable PHP Source Code

<?phpforeach ($iterable as $key => $value) { // foreach body}

Page 64: Maintainable PHP Source Code

If, for, foreach, while, switch

Page 65: Maintainable PHP Source Code

<?phpwhile ($expr) { // structure body}

<?phpdo { // structure body;} while ($expr);

Page 66: Maintainable PHP Source Code

If, for, foreach, while, switch

Page 67: Maintainable PHP Source Code

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;}

Page 68: Maintainable PHP Source Code

判斷式內容請勿寫在同一行

Page 69: Maintainable PHP Source Code
Page 70: Maintainable PHP Source Code
Page 71: Maintainable PHP Source Code

替代 if 方案

Page 72: Maintainable PHP Source Code

取代if (isset($var)) { $var = 'test'; }

Page 73: Maintainable PHP Source Code

isset($var) and $var = 'test';

Page 74: Maintainable PHP Source Code

if (isset($variable)) { $variable = 'test1';}else { $variable = 'test2';}

不建議此寫法

Page 75: Maintainable PHP Source Code

$var = isset($var) ? 'test1' : 'test2'; $var = isset($var) ?: 'default';

Page 76: Maintainable PHP Source Code

邏輯符號表式

Page 77: Maintainable PHP Source Code

請用 and or取代 && ||

讓程式更容易閱讀

Page 78: Maintainable PHP Source Code

此用法僅限於=== 或 !==

或 function 回傳值

Page 79: Maintainable PHP Source Code

運算元計算請使用 && 或 ||

Page 80: Maintainable PHP Source Code

邏輯符號左右兩邊請留一個空白

Page 81: Maintainable PHP Source Code

if ($var == false and $other_var != 'some_value')if ($var === false or my_function() !== false)if ( ! $var)

Page 82: Maintainable PHP Source Code

PHP 物件表示

Page 83: Maintainable PHP Source Code

/*** Documentation Block Here*/class Session{ // all contents of class // must be indented four spaces public function test() {}}

Page 84: Maintainable PHP Source Code

/*** Documentation Block Here*/class Session{

/*** Documentation Block Here*/

public function get_flash($name, $data) { $closure = function($a, $b) { // Your closure code here } }}

Page 85: Maintainable PHP Source Code

物件內部變數或函式務必定義

private,protected,public

Page 86: Maintainable PHP Source Code

/*** Documentation Block Here*/class Session{ var $test = null; /** * Documentation Block Here */

function get_flash($name, $data) {

// Your code here }} 請勿使用 var 定義變數

Page 87: Maintainable PHP Source Code

單引號或雙引號 ?

Page 88: Maintainable PHP Source Code

用單引號更勝於雙引號( 只是為了統一 Code Style)

Page 89: Maintainable PHP Source Code

別再相信單引號效能大於雙引號

Page 90: Maintainable PHP Source Code

有興趣請看效能評估http://nikic.github.com/2012/01/09/Disproving-the-

Single-Quotes-Performance-Myth.html

Page 91: Maintainable PHP Source Code

字串連接Concatenation

Page 92: Maintainable PHP Source Code

$string = 'my string '.$var.' the rest of my string';

變數旁邊請留空白

Page 93: Maintainable PHP Source Code

$string = 'my string ' . $var . ' the rest of my string';

Page 94: Maintainable PHP Source Code

字串如果過長呢 ?例如 SQL 語法

Page 95: Maintainable PHP Source Code

$sql = "SELECT `id`, `name` FROM `people` " . "WHERE `name` = 'Susan' " . "ORDER BY `name` ASC ";

Page 96: Maintainable PHP Source Code

今天就講到這裡

大家有什麼問題

Page 98: Maintainable PHP Source Code

謝謝