How to be a better PHP Developer
by
大澤木小鐵
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 元 -