Page 1
PHPStan超クイックマスター
PHPStan “super” quick master
pixiv Inc.
USAMI Kenta
2021.10.02
公開日:
by USAMI Kenta@tadsan
に東京都渋谷区のGMO Yours フクラスで開催された『第150回 PHP勉強会@東京』でライトニングトーク(5分)として発表しました。
2021.10.02
お前誰よ
PHPerKaigiのチケットを買うとパンフレットがもらえる
PHPStan=Static Analyzer
実行しなくてもバグの可能性を検知できる
全8ページでPHPStanの基礎を押えられる
実務で最低限使うために知っておきたいことを詰め込んだ… はず
PHP本来の型のコンセプトからPHPDocによる拡張までを網羅
僕と契約してPHPStanを完全にマスターしてよ
という話をしたいのではない
PHPStanは完全無料なのでいますぐ入れよう
これからプロになりたい人に本当に伝えたいPHPDocの書きかた
その1配列は使い分ける
世の中にはいろんな配列がある
['name' => 'Miku','age' => 14,]
['Miku', 'Rin', 'Luka',]
['main' => 'Miku','sub' => 'Rin','chorus' => 'Luka',]
単なる型で書くと
array
interface X{function a(): array;}
function (X $obj) {$a = $obj->a();};
function (X $x) {$a = $x->a();$v = $a[0];};
配列から取り出した要素の型がわからないのは都合が悪い
array<int>array<string>
ちょっと前はint[] とか string[]とか書かれてた
array<int,User>
array<string, User>
list<User>
同じような構造が繰り返す配列
キーによって別の意味の値が入っている配列
$a = ['name' => '初音ミク','age' => 16,];
// array{name:string, age: int}
array{name: string,age: int}
$a = ['初音ミク', 16];// array{0: string, 1: int}
繰り返すなら<>キーごとに違うなら{}
その2型は入出力に宿る
クエリパラメータから値をとりたい
function getById(int $id): Article{//}
クエリパラメータからID値をとりたい
実際あぶない
// ?id=1$_GET['id'] === '1';
// ?id=a$_GET['id'] === 'a';
// ?id[]=a$_GET['id'] === ['a'];
危険ではないがよくはない
安全に
int|false
$id = filter_var($_GET['id'] ?? '',FILTER_VALIDATE_INT);
その3むやみに@var書かない
初心者殺しなことに@varには複数の用法
@varはプロパティに付けて書くもの
class Book{/** @var string */public $name;}
class Book{
public string $name;}
class Book{/** @var list<Author> */public $authors;}
class Book{
public list<Author> $authors;}
class Book{/** @var list<Author> */public array $authors;}
@varはconstには基本的に付けない
class Book{/** @var list<int> */const IDS = [1, 2, 3];}
できればつけない方がいい
class Book{/** @var list<int> */const IDS = [1, 2, 3];}
@varをつけない場合
@varを付けると弱くなる
ローカル変数に@varを書く
できれば書かないでくれ!!
むやみに@varを書かないテク
そのうちどこかにちゃんと書きます…
関連リンクがありません。
