Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 51 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (19)

Advertisement

More from Yusuke Ando (20)

Recently uploaded (20)

Advertisement

新標準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. PSR Fukuoka.php / Yusuke Ando (@yando)
  14. 14. PSRはPHP figが策定した 今風なPHPの コーディング規約! Fukuoka.php / Yusuke Ando (@yando)
  15. 15. www.php-fig.org Fukuoka.php / Yusuke Ando (@yando)
  16. 16. 豪華なメンバー陣 Nate Abele: Lithium Robert Lemke: FLOW3 Nils Adermann: phpBB Larry Masters: CakePHP, CakePHP 2 Brett Bieber: PEAR, PEAR2 Ryan Parman: Amazon Web Services Guilherme Blanco: Doctrine, Doctrine2, SDK et al. Evert Pot: SabreDAV Jordi Boggiano: Composer, Packagist Fabien Potencier: Symfony, Symfony2 Karma Dordrak: Zikula Andre Romcke: eZ Publish Paul Dragoonis: PPI, PPI2 Paul Scott: Chisimba, C4 William Durand: Propel, Propel 2 Phil Sturgeon: PyroCMS Andrew Eddie: Joomla Kris Wallsmith: Assetic, Buzz Cal Evans: the community at large Matthew Weier O'Phinney: Zend Larry Garfield: Drupal Framework, Zend Framework 2 Paul M. Jones: Solar Framework, Aura David Zülke: Agavi Project 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)

×