Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
楽をするためのPHPDocと配列型の落とし穴 / PHPDoc and pitfalls of array
Search
takaram
August 24, 2020
Programming
3
3.9k
楽をするためのPHPDocと配列型の落とし穴 / PHPDoc and pitfalls of array
takaram
August 24, 2020
Tweet
Share
More Decks by takaram
See All by takaram
レガシーシステムに自動テストを導入する第一歩 / 2020-phpcon-tdd-in-legacy-product
takaram
1
2.6k
Other Decks in Programming
See All in Programming
ドメイン・ファーストで考える問題解決に役立つモデル設計 / Domain First Model Design
suzushin54
1
1.4k
Material 3で Material 2ぽい見た目にする
numeroanddev
2
250
Migrating to Signals: A Practical Workshop
manfredsteyer
PRO
0
280
Cloud RunとCloud PubSubでサーバレスなデータ基盤2024 with Terraform / Cloud Run and PubSub with Terraform
shinyorke
7
1.9k
incrementalモデルの理解を深める
ikkimiyazaki
2
640
ここ1~2年くらいで 使えるようになった(主要ブラウザーの最新版 がすべて対応した ) ウェブの新機能について ランダムに喋る!
myzkyy
9
6.5k
Go1.22からの疑似乱数生成器について/go-122-pseudo-random-generator
convto
1
160
TCAの Shared Stateって どういう仕組みになってんの?
yimajo
0
330
GitHub Copilot Tips and Tricks
yuichielectric
26
7.5k
TCA魔法学入門🪄
dazy
0
280
Enhancing Applications with Accessibility API
kishikawakatsumi
3
1k
Building a Smaller App Binary
kateinoigakukun
2
210
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
288
19k
4 Signs Your Business is Dying
shpigford
174
21k
Producing Creativity
orderedlist
PRO
335
39k
How to train your dragon (web standard)
notwaldorf
71
5.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
657
120k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
219
21k
The Pragmatic Product Professional
lauravandoore
24
5.7k
Happy Clients
brianwarren
91
6.3k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Why Our Code Smells
bkeepers
PRO
330
56k
Facilitating Awesome Meetings
lara
39
5.5k
Building Flexible Design Systems
yeseniaperezcruz
317
37k
Transcript
楽をするためのPHPDocと 配列型の落とし穴 2020.8.21 @PHP LT Fes
自己紹介 • 名前 ◦ 荒巻 拓哉 • 所属 ◦ 株式会社ラクス
▪ 配配メール というサービスの開発をしてます
PHPDoc、書いてますか?
https://github.com/symfony/symfony/blob/03155addd7c96a9455660b7d51d993cf4f8eb201/src/Symfony/Component/ HttpFoundation/InputBag.php
• コードを読む際に理解しやすい • ドキュメントを生成できる → phpDocumentor • IDEの補完が効きやすくなる → PhpStorm
• 静的解析ができる → PHPStan, Phan など 何のために書くの?
ドキュメント生成 https://github.com/PHPMailer/PHPMailer/blob/e7acd3d92fa02728c51bf64b90615bffc84815f0/src/PHPMailer.php
ドキュメント生成 http://phpmailer.github.io/PHPMailer/classes/PHPMailer.PHPMailer.PHPMailer.html#method_html2text
IDEで補完
静的解析 引数の型が違う、プロパティ・メソッドが存在しない、などを検出 DateTimeクラスにないメ ソッド 引数の型が違う
静的解析 PHPStan
静的解析 Phan
PHPDocの仕様? 各ツールでサポートする記法が少しずつ異なる PSR-5, PSR-19として標準化する動きはあるが、現時点ではまだ提案段階
PHPDocを書いてみる 題材:Userクラス ORマッパーのEntityクラスのイメージ
None
PHPDocを書いてみる PHPDocをちゃんと書いてるからヨシ! ……? → 全ユーザのユーザ名を表示する関数を書いてみる
補完が効かない
補完が効かない
静的解析でエラー検知できない PHPStan Phan
なんで? array型は中の要素の型はわからない → 補完も静的解析もできない
なんとかならないの? User[] と書きましょう プリミティブの配列でもOK • int[] • string[] • (User|string)[]※PhpStorm
2020.2時点で未対応
→
None
PHPStan Phan
その他の配列型の書き方 @return array<int> @return array<string, int> @return array{id: int, name:
string} 上記3つはPhpStorm 2020.2では未対応 (ただのarray扱いになる)
まとめ • PHPDocを書くと楽できる ◦ 自動でドキュメントを作ってくれる ◦ IDEで補完できる ◦ 静的解析ができる •
配列は要素の型も書く ◦ int[]形式 ◦ 連想配列はarray<string, int> か array{id: int}形式 ▪ ただしPhpStormは未対応 • PHPDocはしっかり書きましょう!!!
参考資料 • 2018年のPHPDoc事情とPSR-5 - Qiita https://qiita.com/tadsan/items/72b02339d12120ca37d7 • array shapes記法(Object-like arrays)と旧PSR-5記法で型をつける
- Qiita https://qiita.com/tadsan/items/bfa9465166c351da37e5 • PSR-19: PHPDoc tagsを予習してみよう - BASE開発チームブログ https://devblog.thebase.in/entry/2019/12/14/110000