Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

新標準PSRに学ぶきれいなPHP

89,989 views

Published on

今風のPHPコードを書くのに役立つ規約、PSRを見てみよう. 動画などはこちら http://blog.candycane.jp/archives/1614

Published in: Technology

新標準PSRに学ぶきれいなPHP

  1. 1. 新標準PSRに学ぶ きれいなPHP Fukuoka.php / Yusuke Ando (@yando)
  2. 2. Fukuoka.php / Yusuke Ando (@yando)
  3. 3. 福岡でのボランティア急募! Fukuoka.php / Yusuke Ando (@yando)
  4. 4. Fukuoka.php / Yusuke Ando (@yando)
  5. 5. こんな経験はありませんか? Fukuoka.php / Yusuke Ando (@yando)
  6. 6. 同僚のコードが読みづらい Fukuoka.php / Yusuke Ando (@yando)
  7. 7. タブ派とスペース派の凄惨な勢力争い Fukuoka.php / Yusuke Ando (@yando)
  8. 8. ネーミングでもめる Fukuoka.php / Yusuke Ando (@yando)
  9. 9. コーディング規約が必要! Fukuoka.php / Yusuke Ando (@yando)
  10. 10. Fukuoka.php / Yusuke Ando (@yando)
  11. 11. PEAR Zend 俺々Symfony CakePHP Fukuoka.php / Yusuke Ando (@yando)
  12. 12. たくさんあってどれがいいかわからない Fukuoka.php / Yusuke Ando (@yando)
  13. 13. PSRFukuoka.php / Yusuke Ando (@yando)
  14. 14. PSRはPHP figが策定した 今風なPHPの コーディング規約! Fukuoka.php / Yusuke Ando (@yando)
  15. 15. www.php-fig.orgFukuoka.php / Yusuke Ando (@yando)
  16. 16. 豪華なメンバー陣Nate Abele: Lithium Robert Lemke: FLOW3Nils Adermann: phpBB Larry Masters: CakePHP, CakePHP 2Brett Bieber: PEAR, PEAR2 Ryan Parman: Amazon Web ServicesGuilherme Blanco: Doctrine, Doctrine2, SDKet al. Evert Pot: SabreDAVJordi Boggiano: Composer, Packagist Fabien Potencier: Symfony, Symfony2Karma Dordrak: Zikula Andre Romcke: eZ PublishPaul Dragoonis: PPI, PPI2 Paul Scott: Chisimba, C4William Durand: Propel, Propel 2 Phil Sturgeon: PyroCMSAndrew Eddie: Joomla Kris Wallsmith: Assetic, BuzzCal Evans: the community at large Matthew Weier OPhinney: ZendLarry Garfield: Drupal Framework, Zend Framework 2Paul M. Jones: Solar Framework, Aura David Zülke: AgaviProject Fukuoka.php / Yusuke Ando (@yando)
  17. 17. PSRとは?•Proposing a Standards Recommendation (標準勧告提案)•PSR-0 オートロードの為のファイル名とクラス名の規約•PSR-1 共有コードの高レベルな連携性を目的にした規約•PSR-2 標準化されたコードを目指すスタイルガイド 内容毎にレベル分けがされている Fukuoka.php / Yusuke Ando (@yando)
  18. 18. PSR-0オートロードの為のファイルとクラスの規約 Fukuoka.php / Yusuke Ando (@yando)
  19. 19. PSR-0•名前空間はベンダー名から必ず始める•名前空間の区切りはディレクトリ階層になる•クラス名内のアンダースコアはディレクトリ階層になる•名前空間とクラス名に.phpをつけてファイル名とする•名前空間とクラス名の大文字小文字については不問 PHP5.3と名前空間にスマートに対応 Fukuoka.php / Yusuke Ando (@yando)
  20. 20. PSR-0の例対象は名前空間、クラス名、ファイル名のみ Fukuoka.php / Yusuke Ando (@yando)
  21. 21. autoloadの実装例require_once地獄とさようなら Fukuoka.php / Yusuke Ando (@yando)
  22. 22. PSR-1相互に機能を連携させる為の規約 Fukuoka.php / Yusuke Ando (@yando)
  23. 23. File•PHPコードは長い <?php ?> タグか <?= ?> を使わなければならない。それ以外のタグを使ってはならない•PHPコードはBOMなしUTF-8を使う•ファイルはクラスや関数などの定義を行いその他の副作用があってはならない。または副作用のある処理を行うが定義と処理を同時に行なってはならない Fukuoka.php / Yusuke Ando (@yando)
  24. 24. 副作用のダメな例Fukuoka.php / Yusuke Ando (@yando)
  25. 25. 副作用のセーフな例Fukuoka.php / Yusuke Ando (@yando)
  26. 26. 名前空間とクラス•PSR-0に準拠する•クラス名はStudlyCapsで宣言する•PHP5.3以降では必ず名前空間を使う•PHP5.2以前の場合は擬似名前空間を使う Fukuoka.php / Yusuke Ando (@yando)
  27. 27. 定数、プロパティ、メソッド•定数は全て大文字記述しアンダースコアで単語を区切る•プロパティについては敢えて言及していない StudlyCaps camelCase under_score など•メソッドは camelCaseで宣言する Fukuoka.php / Yusuke Ando (@yando)
  28. 28. PSR-2標準化されたPHPコードの為の規約 Fukuoka.php / Yusuke Ando (@yando)
  29. 29. 基本•PSR-1に準拠•全てのPHPファイルは改行にLFを使わなければならない•ファイルの末尾は一行の空行で終わらなければならない•ファイルがPHPのみの場合 ?> は省略せねばならない Fukuoka.php / Yusuke Ando (@yando)
  30. 30. Line•ハードリミットは設けない•ソフトリミットは120文字で、警告の対象•行は80文字以内であるべき、越える場合は複数行に分割•行の末尾に空白を付けてはならない•可読性の為に空行を加えてもよい•1行に複数のステートメントがあってはならない Fukuoka.php / Yusuke Ando (@yando)
  31. 31. インデント•インデントはスペース4つ、タブを使ってはならない Fukuoka.php / Yusuke Ando (@yando)
  32. 32. キーワード•キーワードは小文字で記述しなければならない•true false null は小文字で記述しなければならない Fukuoka.php / Yusuke Ando (@yando)
  33. 33. 名前空間•名前空間の定義の後には空行を1行置く•use宣言は名前空間宣言の後に置く•宣言ごとに1つづつのuseを使う•useのブロックの後に空行を1行置く Fukuoka.php / Yusuke Ando (@yando)
  34. 34. クラス•extendsとimplementsはクラス定義と同じ行•開きブレースは単独の行に、閉じブレースは内容の次の行 Fukuoka.php / Yusuke Ando (@yando)
  35. 35. プロパティ•全てのプロパティにアクセス権を設定•varキーワードは使ってはならない•1ステートメントに複数のプロパティを含めない•アンダースコアを前置してアクセス権を表現しない Fukuoka.php / Yusuke Ando (@yando)
  36. 36. メソッド•全てのメソッドにアクセス権を設定•アンダースコアを前置してアクセス権を表現しない•メソッド名宣言の後に空白を置かない、括弧の前後にスペースを置かない、ブレースは独立した行にする Fukuoka.php / Yusuke Ando (@yando)
  37. 37. メソッドの引数•引数リストのカンマの前に空白を置かない•カンマの後には空白を1つ置く•デフォルトのある引数はリストの最後に置く Fukuoka.php / Yusuke Ando (@yando)
  38. 38. メソッドの引数2•引数リストを複数行にしてインデントしてもよい•その場合は閉じ括弧と開きブレースを同じ行に Fukuoka.php / Yusuke Ando (@yando)
  39. 39. abstract final static•abstract finalアクセス権の前に置く•staticはアクセス権の後に置く Fukuoka.php / Yusuke Ando (@yando)
  40. 40. メソッドと関数の呼出•メソッド名と括弧の間に空白を置かない•括弧の後に空白を置かない•カンマの前に空白を置かない カンマの後に空白を置く•引数リストを複数行にインデントして分割もできる Fukuoka.php / Yusuke Ando (@yando)
  41. 41. 制御構造•キーワードの後に空白を1つ置く•開き括弧の後と閉じ括弧の前に空白を置かない•閉じ括弧と開きブレースの間には空白を1つ置く•メインのブロックは1レベルインデントする•閉じブレースはメインのブロックの直後 Fukuoka.php / Yusuke Ando (@yando)
  42. 42. if elseif else•else elseif とブレースは同じ行•else ifではなく elseif を使うべき Fukuoka.php / Yusuke Ando (@yando)
  43. 43. switch case•caseはswitchからインデント 内容やbreakもインデント•意図的に何もしないcaseにはコメント Fukuoka.php / Yusuke Ando (@yando)
  44. 44. while do while•特筆事項なし Fukuoka.php / Yusuke Ando (@yando)
  45. 45. for foreach•特筆事項なし Fukuoka.php / Yusuke Ando (@yando)
  46. 46. try catch•特筆事項なし Fukuoka.php / Yusuke Ando (@yando)
  47. 47. クロージャ•function の後に空白を1つ置く useの前後に空白•開き括弧の後、閉じ括弧の前に空白を置かない•カンマの前に空白を置かない、カンマの後に空白を置く Fukuoka.php / Yusuke Ando (@yando)
  48. 48. クロージャ2•引数、変数のリストを複数行にしてもよい Fukuoka.php / Yusuke Ando (@yando)
  49. 49. その他•下記の点についてはPSRー2はあえて言及していない •グローバル変数と定数の定義 •関数の定義 •演算と代入 •間の行の配置 •コメントとドキュメントブロック •クラスのプリフィクスとサフィックス •ベストプラクティス Fukuoka.php / Yusuke Ando (@yando)
  50. 50. おまけ•PSR-2では著名なプロジェクトへの統計調査が行われた Fukuoka.php / Yusuke Ando (@yando)
  51. 51. 質問?Fukuoka.php / Yusuke Ando (@yando)

×