Slide 1

Slide 1 text

jaceju@webconf 2013 如何成為更好的 PHP 開發者 磚業也要專業

Slide 2

Slide 2 text

Jace Ju 大澤木小鐵 http://plurk.com/jaceju http://twitter.com/jaceju http://weibo.com/jaceju http://www.jaceju.net [email protected] 新浪微博軟體工程師 PHP 開發者

Slide 3

Slide 3 text

Slide 4

Slide 4 text

Slide 5

Slide 5 text

Slide 6

Slide 6 text

老闆的想法

Slide 7

Slide 7 text

微薪 技佳

Slide 8

Slide 8 text

PHP 的困境 不需要高門檻 大量舊資訊充斥 社群過於多元化

Slide 9

Slide 9 text

捫心自問 我們真的瞭解 PHP 嗎 要不要繼續學 PHP

Slide 10

Slide 10 text

第一式 瞭解 PHP

Slide 11

Slide 11 text

Slide 12

Slide 12 text

瞭解新版本 4.x → 5.x http://php.net/manual/en/migration5.php 5.2 → 5.3 http://php.net/manual/en/migration53.php

Slide 13

Slide 13 text

瞭解運作環境 Error Reporting Session Save Path Web Server OS

Slide 14

Slide 14 text

瞭解執行模式 Web 執行模式 命令列執行模式

Slide 15

Slide 15 text

瞭解語法 // 交換變數內容 list($a, $b) = array($b, $a); // 直接取得指定位置的值 list( , $el) = getElements(); // PHP 5.4 :⽤用⽅方括號來直接取⽤用元素 $el = getElements()[1];

Slide 16

Slide 16 text

瞭解原生函式 // Bad $diff_ids = array(); foreach ($ids as $id) { if (!in_array($id, $actual_ids)) { $diff_ids[] = $id; } } // Good $diff_ids = array_diff($ids, $actual_ids);

Slide 17

Slide 17 text

瞭解技術原理������� HTTP 協定 資料庫存取 檔案存取 ...

Slide 18

Slide 18 text

學會 SPL 及內建介面 Standard PHP Library http://www.php.net/manual/en/book.spl.php Predefined Interfaces http://www.php.net/manual/en/reserved.interfaces.php

Slide 19

Slide 19 text

第二式 開發工具

Slide 20

Slide 20 text

編輯器 語法高亮度 自動完成 API 查詢 函式或類別方法的查找 其他工具的整合

Slide 21

Slide 21 text

NetBeans for PHP http://netbeans.org/

Slide 22

Slide 22 text

Eclipse PDT http://www.eclipse.org/projects/project.php?id=tools.pdt

Slide 23

Slide 23 text

除錯工具 中斷點設置 完整執行堆棧資訊 變數內容追蹤 .........

Slide 24

Slide 24 text

Xdebug http://xdebug.org/

Slide 25

Slide 25 text

FirePHP http://www.firephp.org/

Slide 26

Slide 26 text

版本控制 歷史紀錄 還原版本 解決衝突 支線版本

Slide 27

Slide 27 text

GitHub http://github.com/

Slide 28

Slide 28 text

Git 教育訓練課程投影片 http://ihower.tw/blog/archives/6696/

Slide 29

Slide 29 text

程式碼等級 一,,,要能對得起自己的良心 二,,,不能考驗測試人員的耐心 三,,,要能得到上頭的歡心 四,,,要能獲得客戶的信心 五,,,要能受到其他開發者的關心

Slide 30

Slide 30 text

第三式 成為團隊一份子

Slide 31

Slide 31 text

Slide 32

Slide 32 text

良好的程式架構 使用 Framework 減少溝通成本 減少開發成本

Slide 33

Slide 33 text

遵守編碼標準 統一團隊編碼風格 PHP-FIG https://github.com/php-fig/fig-standards

Slide 34

Slide 34 text

套件管理������� 避免套件散落各地 統一套件載入方式 Composer http://getcomposer.org/ https://packagist.org/

Slide 35

Slide 35 text

第四式 學會把程式寫活

Slide 36

Slide 36 text

Any fool can write code that a computer can understand. Good programmers write code that humans can understand. Martin Fowler

Slide 37

Slide 37 text

以抽象角度看事物 // 找出特定作者的所有⽂文章 $sql = 'SELECT * FROM articles WHERE '; $sql .= 'author = :author'; $sth = $dbh->prepare($sql); $sth->execute(array( ':author' => 'jaceju' )); $articles = $sth->fetchAll();

Slide 38

Slide 38 text

以抽象角度看事物 // 找出特定作者的所有⽂文章 $blog = new Blog(); $articles = $blog->fetchArticlesByAuthor('jaceju');

Slide 39

Slide 39 text

讓程式容易佈署

Slide 40

Slide 40 text

讓程式容易佈署

Slide 41

Slide 41 text

一開始做對系統純屬神話 要將系統寫活來應付變化

Slide 42

Slide 42 text

組 合

Slide 43

Slide 43 text

讓系統可以被擴充 統一抽象介面 定義插入點 Template Method / Observer 模組化設計 管理�������介面

Slide 44

Slide 44 text

Slide 45

Slide 45 text

第五式 自我要求

Slide 46

Slide 46 text

注意安全 SQL Injection Cross Site Script (XSS) Cross Site Request Forgery (CSRF)

Slide 47

Slide 47 text

Filter Input, Escape Output 不要信任瀏覽器所回傳的資訊 也不要直接輸出敏感的資訊

Slide 48

Slide 48 text

開發時嚴格 上線時寬鬆 解決掉所有警告與錯誤 隱藏但紀錄線上環境的 錯誤訊息

Slide 49

Slide 49 text

天下網站 無堅不摧 唯快不破

Slide 50

Slide 50 text

第六式 效能

Slide 51

Slide 51 text

原則 不做重複的事 放到背景執行 空間換取時間 執行路徑越短越好 保持輕量化 必要時才初始化 有異動才更新 資料少時全抓 資料多時分段抓 事先計算 善用快取

Slide 52

Slide 52 text

不做重複的事 function fib($n) { if ($n < 2) return $n; $f[$n] = fib($n - 2) + fib($n - 1); return $f[$n]; } echo fib(30), "\n"; // 結果: 832040 ,共執⾏行 5.59556889534 秒

Slide 53

Slide 53 text

不做重複的事 function fib($n) { static $f = array(); if (isset($f[$n])) return $f[$n]; if ($n < 2) return $n; $f[$n] = fib($n - 2) + fib($n - 1); return $f[$n]; } echo fib(30), "\n"; // 結果: 832040 ,共執⾏行 0.002144813537 秒

Slide 54

Slide 54 text

奧巴馬籌款網站的製作過程 http://www.ruanyifeng.com/blog/2012/12/ obama_fundraising_website.html

Slide 55

Slide 55 text

第七式 強健的程式碼

Slide 56

Slide 56 text

測試 確保系統舊有功能的完整 建立問題發生的情境

Slide 57

Slide 57 text

自動化測試框架 PHPUnit http://www.phpunit.de/ PHPSpec http://www.phpspec.net/ Behat http://behat.org/

Slide 58

Slide 58 text

重構 不是打掉重練 防止程式碼腐敗 搭配測試實行 Refactoring - Martin Fowler

Slide 59

Slide 59 text

第八式 不要只學寫程式碼

Slide 60

Slide 60 text

系統管理������� 系統安裝 Shell Script Service 管理������� 排程設定

Slide 61

Slide 61 text

學習使用雲端服務 AWS Linode Heroku ...

Slide 62

Slide 62 text

學習使用雲端服務 Hosting Plan http://blog.gslin.org/archives/2012/04/19/2865/ hosting-plan/ Startup : 如何挑選適合的 Hosting Plan? http://blog.xdite.net/posts/2012/04/18/startup- hosting-plan/

Slide 63

Slide 63 text

學習其它語言 JavaScript (Browser) Perl / Python / Ruby / Node.js C English

Slide 64

Slide 64 text

眼 神 死

Slide 65

Slide 65 text

關注國外資訊 PHP Master http://phpmaster.com/ nettuts+ http://net.tutsplus.com/category/tutorials/php/ PHP Mailing Lists http://php.net/mailing-lists.php

Slide 66

Slide 66 text

第九式 學會用輪子 也要學會造輪子

Slide 67

Slide 67 text

https://github.com/c9s c9s

Slide 68

Slide 68 text

PHPConf Taiwan 2013 http://phpconf.tw/

Slide 69

Slide 69 text

不要只問 自己勤練 真正的功夫

Slide 70

Slide 70 text

謝謝大家 版權所有.翻印必舊 - 定價 50 元 -