Page 1
配列の型と向き合う
2020-02-26 PHP勉強会@東京
#phpstudy
公開日:
by USAMI Kenta @tadsan
に東京都中央区日本橋のサイボウズ株式会社で開催された『第145回 PHP勉強会@東京』でライトニングトーク(5分)として発表しました。
配列の型と向き合う
2020-02-26 PHP勉強会@東京
#phpstudy
お前誰よ
うさみけんた (@tadsan)
/ Zonu.EXE
近況
⛳
文字を書いても
書いても終らない
何が
あったのか?
本日のお題
型、ついて ますか?
今回はLTなので皆様既に PhpStormのために型を つけてる前提でいきます
前提
mixedは
災いのもと
mixedすると何が起こるか
間違って引数に渡しても
誰も怒ってくれない
PhpStormで補完が効かなくて
非常に気持ち悪い
静的解析性も開発体験も損ねる
PhpStormでの
開発体験を上げるには
mixedを追放して
型を付けていくしかない
肝に命じて
ほしい
さて
日曜の夜くらいから
記事を書いていた
概要だけ書いて
さくっと投稿する
つもりだった
書いても 書いても
終らん
なので配列の 話だけします
@paramarray
@returnarray
@vararray
書いてます
か?
こいつは何を
言っているのか
return array
<?php
function getIds(): array {
return ...
}
foreach (getIds() as $id) {
$id
}
return array
<?php
function getIds(): array {
return ...
}
foreach (getIds() as $id) {
こいつの型がわからん
←
$id //
}
arrayは
mixed
arrayを 許しては いけない
Laravelのコードを
読んでもarrayまみれ
じゃあ
どうすればいいの
@return int[]
@return BookId[]
解決
本当に?
🙅
配列の用途 は複数ある
リストの
array
$ids = [1, 5, 9];
// @return int[]
// @return array<int>
$ids = [1, 5, 9];
@return int[]
phpDocumentor
形式
@return array<int>
コレクションジェネリクス記法
旧PSR-5形式
@return
ArrayObject<int>
コレクションジェネリクス記法
旧PSR-5形式
連想配列の
array
$id_name_table = [
1 => "田中", 5 => "佐藤", 9 => "山田",
];
// @return array<int,string>
$id_name_table = [
1 => "田中", 5 => "佐藤", 9 => "山田",
];
構造体の
array
$record = [ "id" => 1,
"name" => "田中",
];
これはPSR-5形式 では表現できない
// @return
array{id:int, name:string}
$record = [ "id" => 1,
"name" => "田中",
];
// @return
array{id:int, name:string} array-shapes記法 またはobject-like array
// @return
array{id?:int, name:string} 名前と:の間に ? を 付けると省略可能キー
現在はPSR-5(Draft)から 外されたが、既にほとんど の静的解析ツールには実 装されているので使える
ほとんどの?
Psalm Phan
PHPStan
ほとんど=
PhpStorm以外
型付けられな いのお前だけ
使おう
いますぐ
Psalm Phan
PHPStan
安心ください
たとえばこういう
コードがあるじゃろ
付けよう
型
入れよう
deep-assoc
いますぐ
ダウンロー
ド