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
型を意識したPHPアプリケーション開発
Search
shin1x1
October 08, 2017
Technology
5
10k
型を意識したPHPアプリケーション開発
2017/10/08 PHPカンファレンス2017
https://github.com/shin1x1/phpcon2017
shin1x1
October 08, 2017
Tweet
Share
More Decks by shin1x1
See All by shin1x1
PHPコードの実行モデルを理解する / Understanding-the-PHP-Execution-Model
shin1x1
0
1.9k
制約の力 - 状態を限定する -
shin1x1
4
4.2k
Apple Silicon Mac 時代の PHP 開発環境構築 2021 / php-dev-env-on-m1-mac-era
shin1x1
2
4.5k
Docker イメージのマルチアーキテクチャビルド / docker-muti-arch-build
shin1x1
1
450
Domain modeling with PHP / domain-modeling-with-php-en
shin1x1
0
200
ドメインをモデリングしてPHPコードに落とし込む / domain-modeling-with-php8
shin1x1
14
7k
PHP 8 で作る JSON パーサ / php8-json-parser
shin1x1
1
3.6k
Kubernetes で構築する PHP 開発環境 / php-development-environment-on-kubernetes
shin1x1
3
4.8k
独立したコアレイヤパターンの適用 - fortee 編 - / fortee-meets-independent-core-layer-pattern
shin1x1
0
3.5k
Other Decks in Technology
See All in Technology
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
230
CDCL による厳密解法を採用した MILP ソルバー
imai448
3
230
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
4
990
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
140
Terraform Stacks入門 #HashiTalks
msato
0
370
複雑なState管理からの脱却
sansantech
PRO
1
170
アジャイルでの品質の進化 Agile in Motion vol.1/20241118 Hiroyuki Sato
shift_evolve
0
190
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
SSMRunbook作成の勘所_20241120
koichiotomo
3
180
静的解析で実現した効率的なi18n対応の仕組みづくり
minako__ph
2
440
SDNという名のデータプレーンプログラミングの歴史
ebiken
PRO
2
180
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.9k
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Being A Developer After 40
akosma
87
590k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Unsuck your backbone
ammeep
668
57k
Navigating Team Friction
lara
183
14k
YesSQL, Process and Tooling at Scale
rocio
169
14k
KATA
mclloyd
29
14k
Agile that works and the tools we love
rasmusluckow
327
21k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Transcript
ܕΛҙࣝͨ͠ 1)1ΞϓϦέʔγϣϯ։ൃ ɹ!shin1x1 2017//08 phpcon 2017
https://php-genba.shin1x1.com/
D .BTBTIJ4IJOCBSB!TIJOY ΞδΣϯμ w1)1ͷܕγεςϜ wܕએݴΛར༻ͨ͠ίʔυ࣮ wυϝΠϯಛԽܕͷ࣮5JQT w͍͞͝ʹ
1)1ͷܕγεςϜ
&MPRVFOU 3FQPTJUPSZ $foo = 123; echo gettype($foo), PHP_EOL; => integer
$foo = 'Hello'; echo gettype($foo), PHP_EOL; => string $foo = [1, 2, 3]; echo gettype($foo), PHP_EOL; => array มܕΛ࣋ͨͳ͍ɺ͕ܕΛ࣋ͭ
&MPRVFOU 3FQPTJUPSZ echo 10 + 5, PHP_EOL; => 15 ԋࢉࢠJOUܕͱqPBUܕ͕ର
҉తܕม
&MPRVFOU 3FQPTJUPSZ echo 10 + "5", PHP_EOL; => 15 TUSJOH͕JOUʹม͞ΕΔ
҉తܕม
&MPRVFOU 3FQPTJUPSZ echo 10 + "5e", PHP_EOL; => 15 ҉తܕม
&MPRVFOU 3FQPTJUPSZ echo 10 + "5e2", PHP_EOL; => ??? ҉తܕม
&MPRVFOU 3FQPTJUPSZ echo 10 + "5e2", PHP_EOL; => 510 ҉తܕม
&MPRVFOU 3FQPTJUPSZ 5e2 ʢ5=Ծ෦, 2=ࢦ෦, 10=جʣ => 5 * (10
** 2) => 500 ˞ࢦදه
&MPRVFOU 3FQPTJUPSZ <?php declare(strict_types=1); function double(int $i): int { return
$i * 2; } double(1); // 2 double(“5e”); // TypeError ܕએݴ
D .BTBTIJ4IJOCBSB!TIJOY 1)1ͷܕγεςϜ w͕ܕΛ࣋ͭ w҉తܕมͰॊೈʹ։ൃ wܕએݴͰݫີʹ։ൃ wϢʔβ͕ελΠϧΛબͰ͖Δ
ܕΛ׆༻ͨ͠1)1ίʔυͷ࣮
D .BTBTIJ4IJOCBSB!TIJOY FY੫ࠐΈՁ֨ͷࢉग़ wՁ֨ ফඅ੫ খҎԼΓࣺͯ wՁ֨ਖ਼ͷ
wফඅ੫খͱ͢Δʢʣ
D .BTBTIJ4IJOCBSB!TIJOY %FNP wܕએݴແ͠ wεΧϥʔܕͰܕએݴ wϢʔβఆٛܕͰܕએݴ
D .BTBTIJ4IJOCBSB!TIJOY %FNP https://github.com/shin1x1/phpcon2017
D .BTBTIJ4IJOCBSB!TIJOY υϝΠϯʹಛԽͨ͠ܕΛ࡞Δ wΞϓϦέʔγϣϯυϝΠϯΛදݱ wυϝΠϯϧʔϧΛݕূ wܕએݴʹΑΔදݱͱڧ੍
&MPRVFOU 3FQPTJUPSZ // ܕએݴແ͠ function calculate($price, $taxRate) // υϝΠϯಛԽܕͰܕએݴ function
calculate( Price $price, TaxRate $taxRate): PriceWithTax
υϝΠϯಛԽܕͷ࣮5JQT
D .BTBTIJ4IJOCBSB!TIJOY ҆қʹܧঝΛΘͳ͍ wܧঝݩΫϥεܕͷద߹Λ͙ wܧঝݩϝιουؚ͕·Εͯ͠·͏ wҕৡτϨΠτͰڞ༗
&MPRVFOU 3FQPTJUPSZ // ܧঝ final class PriceWithTax extends Price {}
ܧঝ $price = PriceWithTaxCalculator::calculate($price, $taxRate); // PriceWithTax Price ܕͳͷͰಈ͍ͯ͠·͏ $price = PriceWithTaxCalculator::calculate($price, $taxRate);
D .BTBTIJ4IJOCBSB!TIJOY Πϛϡʔλϒϧʹ͢Δͱ҆શ wશίϯετϥΫλ wෆม݅ݕূ͕ҰͰࡁΉ wϛϡʔλϒϧͳΒݕূ
D .BTBTIJ4IJOCBSB!TIJOY ϑΝΫτϦϝιου wίϯετϥΫλΛQSJWBUF wϑΝΫτϦϝιου wҾʹΑΔόϦΤʔγϣϯ
&MPRVFOU 3FQPTJUPSZ ϑΝΫτϦϝιου public static function of(float $value): self {
return new self($value); } public static function ofByInt(int $value): self { return new self($value / 100); }
&MPRVFOU 3FQPTJUPSZ ϑΝΫτϦϝιου // float TaxRate::of(0.08); // int TaxRate::ofByInt(8);
D .BTBTIJ4IJOCBSB!TIJOY ։ൃͰͷܕݕࠪ wࣗಈςετ $* w1IQ4UPSN w1IBO
D .BTBTIJ4IJOCBSB!TIJOY 1IQ4UPSN wΤσΟλ ϦΞϧλΠϜͳνΣοΫ w*OTQFDU$PEFT ϓϩδΣΫτશମΛҰׅνΣοΫ w6TBHFTPG ܕͷར༻ҰཡΛྻڍ
D .BTBTIJ4IJOCBSB!TIJOY 1IBO w1)1Ͱ࣮͞Εͨ$-*πʔϧ wܕෆҰகTUSJDUҧͳͲΛݕ w$*Ͱܕݕࠪ https://github.com/phan/phan
͍͞͝ʹ
wܕએݴͰܕΛڧ੍ wυϝΠϯΛܕͰදݱ wܕͰؾ͍͍࣋ͪ։ൃΛ D .BTBTIJ4IJOCBSB!TIJOY ܕΛ׆༻ͨ͠։ൃ
D .BTBTIJ4IJOCBSB!TIJOY !TIJOY !TIJOY D .BTBTIJ4IJOCBSB!TIJOY