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-1 と PSR-2 を 5分でざっくり理解する

PHP の PSR-1 と PSR-2 を 5分 でざっくり理解するためのスライド。

PSR-1 と PSR-2 を 5分でざっくり理解する

  1. 1. PSR-1 と PSR-2 を 5分でざっくり理解する 2016-01-13 PHP BLT #2 GMOリサーチ 寺田 渉 Facebook: twitter: github: 寺田渉 @wa_terada waterada
  2. 2. 自己紹介(仕事) - PHP (CakePHP) を主に使って開発 - 継続的インテグレーション - github + git flow で運用 - PHPUnit で カバレッジ 100% - Behat (Selenium Driver 経由の画面テスト) 利用 - vagrant で開発環境構築
  3. 3. 自己紹介(趣味) CakePHP 公式ドキュメント 翻訳
  4. 4. 自己紹介(趣味) ボードゲーム 翻訳
  5. 5. 自己紹介(趣味) TED 翻訳
  6. 6. プログラミング & 翻訳 大好き人間です 自己紹介
  7. 7. CakePHP に issue を立てて、 修正を pull request してみた という記事を Qiita で公開致しました。 コーディングスタイル違反 の指摘が 結構ありまして、今一度、 PSR-1, PSR-2 を復習しておこう と思った次第です。
  8. 8. PSR-1 基本コーディング規約 PSR-2 コーディングスタイル 今日、伝えたいこと! サクッと理解してしまおう。
  9. 9. これから問題を出します。 2つの書き方が出ますので、 1 番が PSR 準拠 だと思ったら 手を挙げてください。 で、今日のルール
  10. 10. PSR-1 基本コーディング規約 まずは
  11. 11. <?php $text = "abc"; どっちが準拠? <? $text = "abc"; 1. 2.
  12. 12. <?php $text = "abc"; どっちが準拠? 1. <?php か <?= のみ可!
  13. 13. どっちが準拠? 1. 2. PHP ファイルは... BOM付き UTF-8 BOM無し UTF-8
  14. 14. どっちが準拠? PHP ファイルは... BOM無しで! 2. BOM無し UTF-8
  15. 15. <?php $aaa = 1; どっちが準拠? <?php $aaa = 1; define('AAA', 1); 1. 2. aaa_config.php <?php define('AAA', 1); aaa_define.php aaa.php
  16. 16. どっちが準拠? 呼んだだけで動く(副作用有)系 と、 宣言系 は一緒のファイルに書いちゃダメ。 1. <?php $aaa = 1; aaa_config.php <?php define('AAA', 1); aaa_define.php
  17. 17. class xAbc extends ... どっちが準拠? class XAbc extends ... 1. 2.
  18. 18. どっちが準拠? クラス は 大文字始まり! class XAbc extends ...2.
  19. 19. public function getValue() どっちが準拠? public function get_value() 1. 2.
  20. 20. どっちが準拠? メソッド は 小文字始まりのキャメル。 public function getValue()1.
  21. 21. const MAX_VALUE = 1; どっちが準拠? const maxValue = 1; 1. 2.
  22. 22. どっちが準拠? 定数 は 大文字! const MAX_VALUE = 1;1.
  23. 23. PSR-2 コーディングスタイル 次に
  24. 24. $a = TRUE; どっちが準拠? $a = true; 1. 2.
  25. 25. どっちが準拠? 予約語 は 小文字で ! $a = true; 2.
  26. 26. public function getValue() どっちが準拠? public function getValue() 1. 2. ^^^^ スペース4つ でインデント ^^^^ TAB でインデント
  27. 27. どっちが準拠? インデント は 半角スペース で! 1. public function getValue() ^^^^ スペース4つ でインデント
  28. 28. }[EOF] どっちが準拠? } [EOF] 1. 2. ファイルの末尾に改行なし ファイルの末尾に改行あり
  29. 29. どっちが準拠? 末尾の改行 必須! } [EOF] 2. ファイルの末尾に改行あり
  30. 30. namespace AaaBbb; use AaaCcc; class Ddd extends ... どっちが準拠? namespace AaaBbb; use AaaCcc; class Ddd extends ... 1. 2. ← 空白行 ← 空白行 ← 空白行
  31. 31. どっちが準拠? namespace、use、class の間には 空白行! 1. namespace AaaBbb; use AaaCcc; class Ddd extends ... ← 空白行 ← 空白行
  32. 32. class Foo { public function get() { どっちが準拠? class Foo { public function get() { 1. 2.
  33. 33. どっちが準拠? クラス, メソッド の { の前では 改行! 1. class Foo { public function get() {
  34. 34. if ($aaa) { どっちが準拠? if ($aaa) { 1. 2.
  35. 35. どっちが準拠? if の { の前では改行 しない! if ($aaa) {2.
  36. 36. $f = function() { どっちが準拠? $f = function() { 1. 2.
  37. 37. どっちが準拠? クロージャ の { の前では改行 しない! $f = function() {2.
  38. 38. $a = function() { return 1; }; どっちが準拠? 1. 2. $a = function() { return 1; };
  39. 39. どっちが準拠? クロージャの { と } が 同じ行ではダメ! 2. $a = function() { return 1; };
  40. 40. public static function is() どっちが準拠? 1. 2. abstract public function is(); static public function is() public abstract function is();
  41. 41. どっちが準拠? この順 で! public static function is()1. abstract public function is();
  42. 42. if ($a) { どっちが準拠? 1. 2. if($a){
  43. 43. どっちが準拠? 空白必須! if ($a) {1.
  44. 44. for ($i = 0 ; $i < 3 ; $i++) { どっちが準拠? 1. 2. for ($i = 0; $i < 3; $i++) {
  45. 45. どっちが準拠? ; の前 に空白 不要! 2. for ($i = 0; $i < 3; $i++) {
  46. 46. $a = function ($a, $b) use ($c) { どっちが準拠? 1. 2. $a = function($a, $b) use($c) {
  47. 47. どっちが準拠? クロージャの function, use の前後 に 空白 必須! $a = function ($a, $b) use ($c) { 1.
  48. 48. class A extends B implements C, D { どっちが準拠? 1. class A extends B implements C, D { 2.
  49. 49. どっちが準拠? class, extends, implements は 絶対に 同じ行 ! interface を改行で書くなら1行1つ! (※改行せずに全てを1行にしてもいい。) class A extends B implements C, D { 1.
  50. 50. public function abc( $a, $b) { どっちが準拠? 1. public function abc( $a, $b ) { 2.
  51. 51. どっちが準拠? public function abc( $a, $b ) { 2. 複数行にするなら 1行につき1引数まで!
  52. 52. $array = array_map( function ($arg) use ($var) { // ... }, $array ); どっちが準拠?1. $array = array_map(function ($arg) use ($var) { // ... }, $array); 2.
  53. 53. どっちが準拠? クロージャは 必ず改行することになる ので 上記のようなパターン になる! $array = array_map( function ($arg) use ($var) { // ... }, $array ); 1.
  54. 54. switch ($expr) { case 1: echo 'A'; // no break case 2: case 3: echo 'B'; break; } どっちが準拠? 1. 2. switch ($expr) { case 1: echo 'A'; case 2: case 3: echo 'B'; break; }
  55. 55. どっちが準拠? 空でないcase でわざと breakしない なら その旨の コメント必須 ! switch ($expr) { case 1: echo 'A'; // no break case 2: case 3: echo 'B'; break; } 1.
  56. 56. 以上、ご静聴ありがとうございました。 <?php か <?= のみ BOM無し UTF-8 副作用有無でファイル分ける 大小文字: クラス名 大小文字: メソッド名 大小文字: 定数名 大小文字: true/false/null インデント ファイル末尾の改行 namespace 周りの空行 {}の改行: クラス/メソッド Facebook: twitter: github: 寺田渉 @wa_terada waterada {}の改行: if {}の改行: クロージャ { {}の改行: クロージャ } static/abstractの位置 前後の空白: if 前後の空白: for 前後の空白: クロージャ 複数行: クラス 複数行: 引数 複数行: 引数でクロージャ switch でコメント必須
  57. 57. 参考情報: • 承諾された PSR が置いてある公式github • PSR-1 (英語) • PSR-2 (英語) • 上記を翻訳してくれているサイト (infinite loop様の技術ブログ) • PSR-1 (日本語) • PSR-2 (日本語)

×