Page 1
Attributeを極める
増補版
Mastering Attributes
pixiv Inc.
USAMI Kenta
2022-03-25
公開日:
by USAMI Kenta @tadsan
にオンラインのZoomウェビナーで開催された『PHPerKaigi 2023』でライトニングトーク(5分)として発表しました。
Attributeを極める
増補版
Mastering Attributes
pixiv Inc.
USAMI Kenta
2022-03-25
お前誰よ
ゴランノスポンサー
先におことわり:
20分ではピクシブ百科事典の
事例紹介までたどりつけませんでした
(話はするけどあっさりめ)
さて
PHPのアップデートサイクル
PHP8.0で
変わったこと
すべての機能を
使えていますか?
その中でも存在感が
ありながら
「何に使うの」度が高い
ア ト リ ビ ュ ー ト
Attributes
実はPHPerKaigiでは
毎年なにかと
言及されている
アトリビュートってなんだ?
<a href="?foo">
<a href="?foo">
属性名
<a href="?foo">
属性名 属性値
<a href="?foo">
属性名 属性 属性値
<a href="?foo">
要素名
<a href="?foo">
要素名 (開始)タグ
<a href="?foo">
text
</a>
<a>要素
今回はHTMLは 本題ではないので
ここまで
ソースコードにも
付加的な情報を
付与したい!
付加的な情報…
われわれは知っている
Docコメント
/**
* @param positive-int $id
*/
function Pnd(int $id): Book
{
コードに書きたい付加情報とは何か
人間だけわかれば
ヨシ
人間もわかって
機械可読
効率高いとうれしい
構文の一部である
必要がある
コードに書きたい付加情報とは何か
人間だけわかれば
ヨシ
人間もわかって
機械可読
効率高いとうれしい
構文の一部である
必要がある
DocCommentは自由帳
なぜDocコメント…
改めてDocコメント
実行時に読める不思議なコメント
メタ?
さっきも出てきた
アトリビュートってなんだ?
Wikipedia曰く
https://ja.wikipedia.org/wiki/メタ
2022-12-14T19:41:26版より
https://ja.wikipedia.org/wiki/メタ
2022-12-14T19:41:26版より
つまり?
メタデータ
データについてのデータ
例:
写真 に対する
(画像データ)
「撮影場所」や「日時」などの
情報
例:
楽曲 に対する
(音声データ)
「演奏者」や「ジャンル」など
の情報
メタプログラミング プログラムについての
プログラミング
メタプログラミングってつまり何
メタプロするなら コードから情報を
読み取れるとうれしい
(それが全てではない)
ということで
基本的な定義方法
use Attribute;
#[Attribute(
Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE
)]
class MyAttr {
基本的な使いかた
use MyAttr;
#[MyAttr('foo', 'bar', 'buz')]
class Book
{
名前付きの呼び出しも可能
use MyAttr;
#[MyAttr(a: 'foo', b: 'bar', c: 'buz')]
class Book
{
Attributeはどこに書けるの?
宣伝
これでみなさまは
Attributeを定義でき
るようになりました
ね、簡単でしょ?
Docコメントと
何が違うの?
比べてみよう
実行時に読める不思議なコメント
実行時に読める不思議なXXXX
Q. 何が違うの?
A. 違うよ、全然違うよ
実際に見てみましょう
ReflectionAttribute
何が変わったのか
これでAttributeの
機能は全部です!
完全マスター
🎉
機能はめっちゃ
シンプル
あとはどういう
「想い」を載せるか
創意工夫が大事
とはいえ定石はある
DI vs Attribute
DB vs Attribute
バリデーション vs Attribute
PHPUnit vs Docコメント
PHPUnit 10 vs Attribute
明示 vs 黙示
「こっそりやる」vs「堂々とやる」
PHPの後方互換性 vs Attribute
ひっそり佇むAttribute
doctrine/annotations
spiral/attributesの互換性
\ \
書くと通常のAttributeと同じ仕様で使える
ピクシブ百科事典 vs Attribute
キミだけの最高の
ユースケースを
見付けだせ