Maintainable PHP Source Code

41,137 views
40,982 views

Published on

How to maintain php source code

Published in: Technology
1 Comment
48 Likes
Statistics
Notes
No Downloads
Views
Total views
41,137
On SlideShare
0
From Embeds
0
Number of Embeds
32,842
Actions
Shares
0
Downloads
274
Comments
1
Likes
48
Embeds 0
No embeds

No notes for slide

Maintainable PHP Source Code

  1. 1. Maintainable PHP Source Code Bo-Yi Wu 吳柏毅 2012.07.21 http://blog.wu-boy.com/
  2. 2. 維護 PHP 專案程式碼 為什麼大家需要關心呢 ?
  3. 3. 因為我們每天花了很多時間在維護程式碼
  4. 4. 維護 PHP 專案程式碼 誰最關心呢 ?
  5. 5. 公司員工 : 趕快把程式碼寫完來去看電影公司老闆 : 請給我一個可以擴充性的架構
  6. 6. 員工 A: 奇怪這是誰寫的 Code 這麼亂員工 B: 員工 A 寫的架構好像怪怪的 ?
  7. 7. 為什麼大家會有這些想法呢?
  8. 8. 那是因為沒有共同制定的 Coding Style
  9. 9. 沒有好的 Coding Style對於一個專案主管是非常痛苦
  10. 10. 那什麼是易於維護的程式碼 Maintainable Code
  11. 11. 四項必定要求 非常直覺 容易了解 可擴充性 容易 Debug
  12. 12. 進入今日主題Code Style Guide 程式設計師互相溝通的語言
  13. 13. 各式各樣的編輯器Tabs vs 4 Spaces
  14. 14. 使用 Space 易於閱讀 Diff 程式碼
  15. 15. 所以請將編輯器設定為 (Replaces tabs by spaces)4 Spaces 取代 Tabs
  16. 16. 程式碼結尾請勿有 多餘的空白
  17. 17. 正規取代驗證多餘空白^(.*[^s])?s+$
  18. 18. ^(.*[^s])?s+$開頭 結尾
  19. 19. ^(.*[^s])?s+$代表 $1 結尾符號
  20. 20. ^(.*[^s])?s+$ 結尾無空白
  21. 21. ^(.*[^s])?s+$ $1 可有可無
  22. 22. ^(.*[^s])?s+$ 結尾為空白
  23. 23. Geany Editor
  24. 24. 檔案命名
  25. 25. 請一律以小寫命名
  26. 26. 檔案內容宣告
  27. 27. 只使用 <?php 或 <?= 標籤
  28. 28. PHP5.4 以後取消 short_open_tag 直接使用 <?= 標籤
  29. 29. 檔案結尾請忽略 ?> 標籤
  30. 30. 檔案格式
  31. 31. use only UTF-8 without BOM for PHP code 避免資料庫連線字元問題
  32. 32. 如何寫程式註解 註解上面必須空一行
  33. 33. 如何寫函式註解 註解上面必須空一行
  34. 34. 變數命名
  35. 35. 請使用小寫英文字母或底線
  36. 36. 常數命名
  37. 37. 請使用大寫英文字母或底線 ( 定義在同一檔案內 )
  38. 38. PHP Keywords
  39. 39. true, false, nullarray, integer, string
  40. 40. 請一律用小寫
  41. 41. 條件判斷式(Control Structures)
  42. 42. if, for, foreach, while, switch
  43. 43. if, for, foreach, while, switch
  44. 44. if ($arg === true) { //do something here}elseif ($arg === null) { //do something else here}else { //catch all do something here}
  45. 45. 單行條件式過長
  46. 46. if (($a == $b) and ($b == $c) or ($a == $e)){ $a = $d;}
  47. 47. if($arg === true) { //do something here}elseif($arg === null) { //do something else here}else { //catch all do something here} 條件式 if 括號旁邊請留一個空白
  48. 48. If, for, foreach, while, switch
  49. 49. <?phpfor ($i = 0; $i < $max; $i++) { //loop here}
  50. 50. <?phpfor ($i=0; $i<$max; $i++) { //loop here} 邏輯符號 =,< 左右兩邊請留一個空白
  51. 51. If, for, foreach, while, switch
  52. 52. <?phpforeach ($iterable as $key => $value) { // foreach body}
  53. 53. If, for, foreach, while, switch
  54. 54. <?phpwhile ($expr) { // structure body}<?phpdo { // structure body;} while ($expr);
  55. 55. If, for, foreach, while, switch
  56. 56. 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;}
  57. 57. 判斷式內容請勿寫在同一行
  58. 58. 替代 if 方案
  59. 59. 取代if (isset($var)) { $var = test; }
  60. 60. isset($var) and $var = test;
  61. 61. if (isset($variable)) { $variable = test1;}else { $variable = test2;} 不建議此寫法
  62. 62. $var = isset($var) ? test1 : test2;$var = isset($var) ?: default;
  63. 63. 邏輯符號表式
  64. 64. 請用 and or取代 && ||讓程式更容易閱讀
  65. 65. 此用法僅限於 === 或 !==或 function 回傳值
  66. 66. 運算元計算請使用 && 或 ||
  67. 67. 邏輯符號左右兩邊 請留一個空白
  68. 68. if ($var == false and $other_var != some_value)if ($var === false or my_function() !== false)if ( ! $var)
  69. 69. PHP 物件表示
  70. 70. /*** Documentation Block Here*/class Session{ // all contents of class // must be indented four spaces public function test() {}}
  71. 71. /*** Documentation Block Here*/class Session{ /** * Documentation Block Here */ public function get_flash($name, $data) { $closure = function($a, $b) { // Your closure code here } }}
  72. 72. 物件內部變數或函式 務必定義private,protected,public
  73. 73. /*** Documentation Block Here*/class Session{ var $test = null; /** * Documentation Block Here */ function get_flash($name, $data) { // Your code here }} 請勿使用 var 定義變數
  74. 74. 單引號或雙引號 ?
  75. 75. 用單引號更勝於雙引號 ( 只是為了統一 Code Style)
  76. 76. 別再相信單引號效能大於雙引號
  77. 77. 有興趣請看效能評估http://nikic.github.com/2012/01/09/Disproving-the- Single-Quotes-Performance-Myth.html
  78. 78. 字串連接Concatenation
  79. 79. $string = my string .$var. the rest of my string; 變數旁邊請留空白
  80. 80. $string = my string . $var . the rest of my string;
  81. 81. 字串如果過長呢 ? 例如 SQL 語法
  82. 82. $sql = "SELECT `id`, `name` FROM `people` " . "WHERE `name` = Susan " . "ORDER BY `name` ASC ";
  83. 83. 今天就講到這裡大家有什麼問題
  84. 84. 參考資料 PHP Framework Interop Group  PSR­0  PSR­1  PSR­2 Zend Framework Coding Standard for PHP 
  85. 85. 謝謝

×